加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server – 架构比较在发布期间预部署脚本之前运行

发布时间:2020-12-12 06:43:00 所属栏目:MsSql教程 来源:网络整理
导读:使用sqlpackage.exe发布dacpac时,它首先运行Schema Compare,然后运行预部署脚本.例如,当您需要删除表或重命名列时,这会导致问题.架构比较是在修改对象和部署失败之前完成的.必须重复发布才能考虑新模式. 任何人都有一个解决方案,不涉及两次发布? 解决方法 Ge
使用sqlpackage.exe发布dacpac时,它首先运行Schema Compare,然后运行预部署脚本.例如,当您需要删除表或重命名列时,这会导致问题.架构比较是在修改对象和部署失败之前完成的.必须重复发布才能考虑新模式.

任何人都有一个解决方案,不涉及两次发布?

解决方法

Gert Drapers将其称为预部署前脚本 here

实际上这是一个挑战.如果需要将非可空和外键列添加到充满数据的表中 – 您只能使用单独的脚本.

如果您是唯一的开发人员 – 这不是问题,但是当您拥有一个大型团队时,必须在每次数据库发布之前以某种方式执行“单独脚本”.

我们使用的解决方法:

>创建单独的SQL“Before-publish”脚本(在DB项目中),该脚本具有[Build action = None]属性
>创建custom MSBuild Task在哪里调用SQLCMD.EXE实用程序,将“Before-publish”脚本作为参数传递,然后调用SQLPACKAGE.EXE实用程序传递DB.dacpac
>将自定义MSBuild任务的调用添加到db.sqlproj文件.例如:

<UsingTask 
        TaskName="MSBuild.MsSql.DeployTask" 
        AssemblyFile="$(MSBuildProjectDirectory)DeployMsBuild.MsSql.DeployTask.dll" />

<Target Name="AfterBuild">
    <DeployTask 
        Configuration="$(Configuration)" 
        DeployConfigPath="$(MSBuildProjectDirectory)DeployDeploy.config" 
        ProjectDirectory="$(MSBuildProjectDirectory)" 
        OutputDirectory="$(OutputPath)" 
        DacVersion="$(DacVersion)">
    </DeployTask>
</Target>

上面的MsBuild.MsSql.DeployTask.dll是自定义MSBuild任务.

因此,可以从Visual Studio调用“Before-publish”脚本.

对于CI,我们使用批处理文件(* .bat),其中调用了相同的两个实用程序(SQLCMD.EXE和SQLPACKAGE.EXE).

我们得到的最后一个过程有点复杂,应该在另一篇文章中描述 – 这里我只提到了一个方向:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读