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 出现在开发环境中?
根据文档( https://technet.microsoft.com/en-us/library/bb510680(v=sql.110).aspx)
兼容级别仅提供与 SQL Server 早期版本的部分向后兼容性。
因此,在引用的链接中,您可以看到兼容性模式可能影响的列表。
为了避免这种问题,根据经验我的建议是:开发和生产必须相同(尽可能)。如果不是,例如在计划的升级期间,至少测试环境必须与生产环境类似。
过去,我们不得不将发布周期冻结几天(关键错误修复除外)。