无法在 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”无法识别“>”无法识别的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server-聚焦使用视图若干限制/建议视图查询性能问题,你懵逼了?(二十五)

通过消除视图简化 SQL Server 查询

在 SQL Server 的视图中使用表值函数

在存储过程中接受永远无法工作的 SQL Server 查询

SQL Server里面啥样的视图才能创建索引

使用联接的 SQL Server 全文搜索无法按预期工作