无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别
Posted
技术标签:
【中文标题】无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别【英文标题】:Unable to use a working query in a SQL Server View: 'IS' not recognized '>' not recognized 【发布时间】:2017-08-20 07:27:15 【问题描述】:如果直接用作字符串查询,我会运行此查询:
SELECT BI.CUSTOMER_CODE AS [Customer Code],
BI.ADD_NAME AS Customer,
SI.ACCOUNT_CODE AS [Account Code],
BID.BILL_NO AS [Bill #],
BI.BILL_DATE AS [Bill Date],
BI.CASHIER_NO AS [Cashier #],
C.LOCATION,
BID.SERVICE_CODE AS [Service Code],
SI.NAME AS Service,
BID.FEES AS [Service Fee],
BID.REQUESTED_QTY AS [Requested Quantity],
BID.REQUESTED_QTY * 10 AS [Knowledge Fee],
BID.REQUESTED_QTY * 10 AS [Innovation Fee],
BID.ITEM_TOT + BID.REQUESTED_QTY * 20 AS Total,
BID.REQUESTED_QTY * BID.FEES AS [Total w/o Gov. Fee],
IIF(BI.REMARKS IS NULL, '', IIF(LEN(BI.REMARKS) > 100, CONCAT(LEFT(BI.REMARKS, 100), '...'), BI.REMARKS)) AS [Remarks]
FROM dbo.BILL_INFO AS BI
INNER JOIN dbo.BILL_INFO_DETAIL AS BID
ON BI.BILL_NO = BID.BILL_NO
AND BI.CASHIER_NO = BID.CASHIER_NO
AND BI.PAY_MODE = BID.PAY_MODE
INNER JOIN dbo.CASHIER AS C
ON BI.CASHIER_NO = C.CASHIER_NO
INNER JOIN dbo.SERVICE_INFO AS SI
ON BID.SERVICE_CODE = SI.SERVICE_CODE
WHERE (BI.PAY_MODE = '3')
AND (BI.INPUT_STATUS = '1')
AND (MONTH(BI.BILL_DATE) = MONTH(GETDATE()))
AND (YEAR(BI.BILL_DATE) = YEAR(GETDATE()))
AND (BI.ACCOUNT_CODE IN ( 'ADP', 'ASP' ))
AND (BID.SERVICE_CODE NOT IN ( 314, 1636, 1637, 1538 ))
ORDER BY [Customer Code],
[Bill Date]
但是一旦我尝试在视图中使用它,就会出现以下错误:
Error in list of function arguments: 'IS' not recognized.
Error in list of function arguments: '>' not recognized.
Unable to parse query text.
如果我使用 IIF 删除最后一列,一切正常。为什么视图中不接受查询?
版本: Microsoft SQL Server 2017 (RC1) - 14.0.800.90 (X64) 2017 年 7 月 11 日 07:03:16 版权所有 (C) 2017 Microsoft Corporation。版权所有。 Windows 10 Enterprise Insider Preview 10.0(内部版本 16257:)(Hypervisor)上的 Express Edition(64 位)
使用 SSMS 使用设计器创建视图:
编辑:更新查询以显示更好的 JOIN,因为我在错误的查询中发布但使用了更好的查询
【问题讨论】:
在最后一行,你想做什么:IIF(BI.REMARKS....
?
确保打印为空白而不是 NULL,并且不能超过 100 个字符,否则会弄乱 s-s-rS 上的报告布局
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN
语法-92 SQL 标准(25 年前),不鼓励使用它
@marc_s ,我不小心发布了错误的查询。我已经更新了正确的,但仍然面临同样的问题。
你不明白我的意思。要创建不需要 GUI 的视图,只需在查询之前添加 CREATE VIEW dbo.my_view as ... 即可
【参考方案1】:
在@sepupic 的comment 帮助下,我终于能够通过查询而不是设计器来创建视图。由于错误仍然存在,因此无法再设计此视图,但我可以调用此视图并获取数据,这对我来说是成功的。
【讨论】:
以上是关于无法在 SQL Server 视图中使用工作查询:“IS”无法识别“>”无法识别的主要内容,如果未能解决你的问题,请参考以下文章