我正在运行一个包含以下CASE
子句的select语句:
SELECT
(CASE MyTable.IsBook WHEN 1 THEN 'B' ELSE 'M' END) AS IsBookOrManuscript
FROM MyTable;
我在运行SQL Server 2008 R2
的两个不同物理服务器中分别使用构建版本10.50.4276.0
和SQL Server 2014恢复了相同的数据库(架构和数据)。
在SQL Server 2014中运行时,查询将按预期返回。在SQL Server 2008R2中运行时,会出现错误消息Incorrect syntax near ' '.
。
在脚本文件中搜索非ascii字符我发现确实在0x0A
行中出现了三次CASE
字符并删除它解决了SQL Server 2008R2中的问题。
有谁知道为什么会这样?这是预期的行为吗?据我所知,自我上次更新以来已经发布了2个CU,但它们似乎没有修复或认识到这个问题。有什么想法吗?
答案 0 :(得分:0)
检查
的设置QUOTED_IDENTIFIER
在每台服务器上。
MSDN 说:
使SQL Server遵循关于引号分隔标识符和文字字符串的ISO规则。由双引号分隔的标识符可以是Transact-SQL保留关键字,也可以包含Transact-SQL标识符语法规则通常不允许的字符。
所以请尝试下一个代码:
SET QUOTED_IDENTIFIER off
-- Type your code here
SET QUOTED_IDENTIFIER On