gpt4 book ai didi

synchronization - SqlPackage.exe 用于发布可以删除目标数据库上不存在的对象的 .dacpac 文件的正确参数是什么?

转载 作者:行者123 更新时间:2023-12-04 16:49:59 25 4
gpt4 key购买 nike

因为我们可以在 Visual Studio 2012 中使用来自 Microsoft SSDT 的 SqlPackage.exe 来同步数据库,如讨论的那样 here ,我用它来同步目标数据库,称为 TargetDb,以匹配存储在 SQL Server 数据库项目(称为 DbProject)中的源数据库对象。

SqlPackage.exe 命令的操作 /a:Publish 允许我们将 DbProject 的 .dacpac 文件同步到 TargetDb,但默认参数不会删除 TargetDb 的DbProject 中不存在的对象

打开标志 /p:DropObjectsNotInSource=true 将解决这个问题,但也会产生奇怪的行为

  1. 标志 /p:DropObjectsNotInSource=true 将在 TargetDb 上删除用户/登录对象,这绝对不是预期的!我能找到的最接近的是 /p:DropRoleMembersNotInSource=false/p:DropPermissionsNotInSource=false 但这些帮助不大。
  2. 标志 /p:DropObjectsNotInSource=true 将打破标志 /p:BlockOnPossibleDataLoss=true 这意味着如果发生数据丢失,更新操作将不被封锁;那根本不是我想要的。

目前我必须接受 TargetDb 上的“垃圾”/冗余对象 :(

有什么更好的标志可以让我到达那里?

最佳答案

我问过类似的问题here并最终将用户编写为部署后脚本,以便在部署数据库升级后重新创建它们。

DropPermissionsNotInSource 属性仅适用于GRANT/DENY 权限。DropRoleMembersNotInSource 仅用于角色成员资格。

遗憾的是,当 DropObjectsNotInSource 属性设置为 true 时,没有选项可以将用户从被删除的对象中排除。

我们还在预部署脚本中进行某些更改(如更改列类型),因为即使更改不会导致数据丢失,BlockOnPossibleDataLoss 也可以阻止部署。我想过度谨慎而不是不够谨慎是件好事。

关于synchronization - SqlPackage.exe 用于发布可以删除目标数据库上不存在的对象的 .dacpac 文件的正确参数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20798856/

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