ber*_*d_k 7 sql-server compatibility-level
在 SQL-Server 2005 上将 cmptlevel 设置为 80 会禁止使用 PIVOT 和 APPLY,但不会影响分析函数的使用。这背后有什么道理吗?
MSDN ALTER DATABASE Compatibility Level解释了各个级别的行为。(只需向下滚动,您就会找到以下主题的比较表)
如果您只是从 MSDN 顶部菜单更改版本,您可以找到更具体的比较表(它们链接到以下列表中的前 3 个版本)
120 = SQL Server 2014
较低兼容级别和级别 120 之间的差异
我观察到的一些基本原理,但这并不详尽,只是我的猜测
兼容性级别不是一个全有或全无的事情。它在您修复问题时提供部分向后兼容性。
一个带有 LOCK 提示的简单示例
FROM
Table (NOLOCK) -- not allowed with level 90+
Run Code Online (Sandbox Code Playgroud)
和
FROM
Table WITH (NOLOCK) -- WITH is optional for level 80
Run Code Online (Sandbox Code Playgroud)
为什么现在这是强制性的,我不知道。与 CTE 有关系吗?
对于 PIVOT 和 APPLY,我怀疑使用这些的 SQL 语句只是非法的 SQL Server 2000 语法,而 ROW_NUMBER 只是一个未知函数并且“不太”关键
使用 CROSS APPLY 的示例。对于 80,这是非法的 SQL Server 2000 语法。
FROM
SomeTable S
CROSS APPLY --or JOIN
dbo.someTVF (S.column)
Run Code Online (Sandbox Code Playgroud)
由于较新版本中的级别较低,因此有很多关于错误的问题供您查看并希望得到理解