DROP TABLE IF EXISTS under compatibility level 120



我们的生产SQL Server运行在版本2014(12.0.6433.1)和我们的开发SQL Server是版本2019(15.0.4033.1)。

将开发数据库设置为兼容级别120以模拟生产。针对dev数据库开发的脚本在生产中失败,因为语法仅在SQL Server 2016中引入。

下面的例子在SSMS(18.5)中对兼容级别为120的开发数据库执行,尽管它在版本中引入了SQL Server 2016。

CREATE TABLE [dbo].[Compatability120_TEST] (ID INT)
GO
DROP TABLE IF EXISTS [dbo].[Compatability120_TEST]
GO

设置兼容性级别是否会阻止它在开发中工作?

No。兼容性级别的目的不是提供对旧版本的100%模拟。对于DROP TABLE IF EXISTS,不存在需要保留向后兼容性的先前行为,因此它是允许的。这通常很有用,因为它允许您在新代码中使用新语法。似乎您需要一个配置为prod的测试预生产环境。

如果需要正确的版本检查,请使用数据库项目。将目标版本设置为2016将检查那里不支持的语法(并且构建项目将生成只使用2016语法的脚本-排除一些错误)。如果需要更可靠的测试,也可以使用适当版本的LocalDB安装。

相关内容

  • 没有找到相关文章

最新更新