gpt4 book ai didi

sql-server - 使用 Visual Studio 数据库项目进行重要的增量更改部署

转载 作者:行者123 更新时间:2023-12-03 00:52:51 24 4
gpt4 key购买 nike

假设我正在对数据库进行某种重要的更改,这需要“自定义”工作才能从版本 A 升级到 B。例如,将用户 ID 列从 UUID 数据类型转换为 Windows 域用户名。

如何使其可自动部署?也就是说,我希望允许开发人员右键单击该项目,单击“部署”,然后在使用足够旧的数据库时执行此逻辑。

我在数据库项目中没有看到任何此类登录的地方 - 似乎没有任何此类“升级脚本”的规定。这真的不可能吗?澄清一下,逻辑显然不能自动生成,但我希望它根据需要自动执行。

当然,第一个逻辑障碍是部署实用程序不知道是否需要更新任何此类逻辑 - 我假设我也可以为此提供逻辑(例如检查版本表和如果最新版本是<5.0,则执行此升级,稍后添加新版本行)。

这可能吗?我可以使用复杂的自定义更改脚本进行全自动部署吗?当然,我不必将所有自定义更改逻辑粘贴到(很快)巨大的构建前或构建后脚本中......

最佳答案

如果您在部署期间将数据库注册为数据层应用程序,您确实可以检查已安装的版本。您可以通过在发布配置文件中包含以下内容来实现此目的:

    <RegisterDataTierApplication>True</RegisterDataTierApplication>

此选项将在部署期间在 msdb 数据库中注册架构及其版本号。请务必在版本之间更改 dacpac 版本号!我们使用msbuild创建dacpac,设置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

关于sql-server - 使用 Visual Studio 数据库项目进行重要的增量更改部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1761421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com