我们最近遇到了一个问题,即我们的开发团队正在编写的SQL包括SQL Server 2012/2014的新功能,并且2008 compatibility中运行的SQL Server 2014允许使用它。
当我在开发服务器上运行它时
EXEC SP_DBCMPTLEVEL '<insert db>'
GO
IF 1=1
THROW 51000, 'values match', 1;
GO
它返回此
当前兼容级别为100.
消息51000,级别16,状态1, 第5行与值匹配
在生产中,相同的SQL显示了这一点:
当前兼容级别为100.
消息102,级别15,状态1, 第5行左'THROW'附近的语法不正确。
我们尚未升级我们的生产SQL Server,并且正在遇到部署问题。 THROW是一个SQL Server 2012新增的关键字,所以我希望2008服务器能够打破语法。似乎兼容级别对我来说是破坏的。
可以采取哪些措施来防止在开发环境中允许不兼容的SQL?
答案 0 :(得分:2)
根据文件(https://technet.microsoft.com/en-us/library/bb510680(v=sql.110).aspx)
兼容级别仅提供部分向后兼容性 早期版本的SQL Server。
因此,在引用的链接中,您可以看到兼容模式可以影响的列表。
为了避免这种问题,根据经验,我的建议是:开发和生产必须相同(尽可能)。如果不是,例如在计划的升级期间,至少测试环境必须与生产类似。
过去我们不得不冻结释放cicle几天(除了关键的错误修正)。