首页 > 解决方案 > 如果在兼容级别 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

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

标签: sql-serversql-server-2014

解决方案


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

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


推荐阅读