包含0x0A字符的SQL Server 2008R2脚本中的语法不正确

时间:2016-10-21 08:40:38

标签: sql-server sql-server-2008-r2

我正在运行一个包含以下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,但它们似乎没有修复或认识到这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

检查

的设置
QUOTED_IDENTIFIER 

在每台服务器上。

MSDN 说:

  

使SQL Server遵循关于引号分隔标识符和文字字符串的ISO规则。由双引号分隔的标识符可以是Transact-SQL保留关键字,也可以包含Transact-SQL标识符语法规则通常不允许的字符。

所以请尝试下一个代码:

SET QUOTED_IDENTIFIER off
-- Type your code here 
SET QUOTED_IDENTIFIER On