如果您在部署期间将数据库注册为数据层应用程序,您确实可以检查已安装的版本。您可以通过在发布配置文件中包含以下内容来做到这一点:
<RegisterDataTierApplication>True</RegisterDataTierApplication>
此选项将在部署期间在 msdb 数据库中注册架构及其版本号。请务必在版本之间更改 dacpac 版本号!我们使用 msbuild 创建 dacpacs,设置 dacpac 版本的示例代码:
DacVersion=$(ProjectReleaseNumber).$(ProjectBuildNumber).$(ProjectRevisionNumber)
完成此操作后,您可以构建版本感知的预部署脚本。
-- Get installed version, e.g. 2.3.12309.0
DECLARE @InstalledVersion NVARCHAR(64) = (
SELECT type_version
FROM msdb.dbo.sysdac_instances
WHERE instance_name = DB_NAME()
);
-- Get the major part of the version number, e.g. 2
DECLARE @InstalledVersionMajor TINYINT = CONVERT(TINYINT, SUBSTRING(@InstalledVersion, 0, PATINDEX('%.%', @InstalledVersion)));
IF (@InstalledVersionMajor < 5)
BEGIN;
PRINT 'Do some nontrivial incremental change that only needs to be applied on version before 5';
END;
检查您当前正在部署的版本号有点麻烦,但也可以完成。查看 Jamie Thomson 的优秀博客了解这项技术:Editing sqlcmdvariable nodes in SSDT Publish Profile files using msbuild