SQL Server 兼容级别不起作用

Unh*_*ean 5 sql-server compatibility

我们最近遇到一个问题,我们的开发团队正在编写的 SQL 包含 SQL Server 2012/2014 中的新功能,并且在2008 兼容性中运行的 SQL Server 2014 允许这样做。

当我在开发服务器上运行它时

EXEC SP_DBCMPTLEVEL '<insert db>'
GO

IF 1=1
    THROW 51000, 'values match', 1; 
GO
Run Code Online (Sandbox Code Playgroud)

它返回这个

当前兼容级别为 100。
消息 51000,级别 16,状态 1,第 5 行
值匹配

在生产中,相同的 SQL 显示了这一点:

当前兼容级别为 100。
消息 102,级别 15,状态 1,第 5
行“THROW”附近的语法不正确。

我们尚未升级生产 SQL Server,并且遇到了部署问题。THROW 是 SQL Server 2012 中新增的一个关键字,因此我预计 2008 服务器会破坏该语法。对我来说,兼容性级别似乎已经被破坏了。

如何防止不兼容的 SQL 出现在开发环境中?

use*_*r_0 2

根据文档( https://technet.microsoft.com/en-us/library/bb510680(v=sql.110).aspx

兼容级别仅提供与 SQL Server 早期版本的部分向后兼容性。

因此,在引用的链接中,您可以看到兼容性模式可能影响的列表。

为了避免这种问题,根据经验我的建议是:开发和生产必须相同(尽可能)。如果不是,例如在计划的升级期间,至少测试环境必须与生产环境类似。

过去,我们不得不将发布周期冻结几天(关键错误修复除外)。