MERGE保留关键字在不同版本的SQL Server中的使用

问题描述 投票:0回答:1

我在 SQL Server 2012 中调用存储过程(如下所述)时遇到运行时错误,但在 SQL Server 2014 中却没有,它看起来非常基本,但想知道确切的原因以及是否有解决方法。

在 SQL Server 2012 中运行

SP_AddState 29,merge

在 SQL Server 2014 中给出错误为

System.Data.SqlClient.SqlException(0x80131904):附近语法不正确 关键字“合并”。

仅当调用为时才有效

SP_AddState 29,'merge'

那么这种执行行为的原因是什么?

sql-server t-sql sql-server-2012 sql-server-2014 compatibility-level
1个回答
0
投票

MERGE
运算符于 2008 年添加到 SQL Server,同时,
MERGE
被设为 保留关键字。因此,当使用带有值 MERGE
unquoted
文字时,将被视为
MERGE
运算符的开始,而使用
EXEC
时不允许这样做。

虽然它是在 2008 年添加的(并且您正在使用 2012 年),但如果您使用旧的兼容级别(90 或更低),则该关键字可能不会被视为一个,因为它不是 SQL 中的保留关键字Server 2005。这可以解释为什么您在 SQl Server 2012 和 2014 中得到不同的行为。

当然,实际上,您真的不应该再使用兼容性 90(同样,这就是 SQL Server 2005!),甚至是 SQL Server 2012(两年前就已停止使用),甚至 2014 年也已结束*不到个月的生活。另外,虽然语法 EXEC <ProcName> (@ParameterName = ) <Literal> 是允许的,但你

真的
不应该将它用于字符串;使用字符串 字符串文字; 'nmerge' 是您应该使用的语法。这可以避免上述问题,以及如果您有其他保留关键字,或者您有一个需要分隔的字符串(以数字开头,具有非字母数字字符等)。
    

© www.soinside.com 2019 - 2024. All rights reserved.