SQL Server兼容级别无法正常工作

时间:2017-07-24 14:18:27

标签: sql-server compatibility

我们最近遇到了一个问题,即我们的开发团队正在编写的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?

1 个答案:

答案 0 :(得分:2)

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

  

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

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

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

过去我们不得不冻结释放cicle几天(除了关键的错误修正)。