首页 > 解决方案 > 编写脚本以在不同的 SQL 引擎上运行

问题描述

我正在编写一个需要能够在多个 SQL 引擎(即 SQL Server 和 Azure SQL)上运行的 SQL 脚本。一条IF语句检查数据库版本以执行正确的代码。但是如果在错误的引擎上使用代码将无法编译。

这在 Azure SQL 中运行良好,但 SQL Server 拒绝它。

IF (@@VERSION LIKE 'Microsoft SQL Azure %')
BEGIN
    ADD SENSITIVITY CLASSIFICATION TO [dbo].[User].[UserName] WITH (LABEL = 'Confidential', INFORMATION_TYPE = 'Credentials')
    ...
END
GO

我有什么选择来确保这被两个引擎接受?

标签: sql-serverazure-sql-database

解决方案


动态 SQL 可用于规避语法检查:

IF (@@VERSION LIKE 'Microsoft SQL Azure %')
BEGIN
    EXEC('ADD SENSITIVITY CLASSIFICATION TO [dbo].[User].[UserName] WITH (LABEL = ''Confidential'', INFORMATION_TYPE = ''Credentials'')');
    ...
END
GO

请注意,所有内容'都必须引用,即''添加对此处字符串 i T-SQL 的支持


从 SQL Server 2019 开始将支持添加敏感度分类。


推荐阅读