正如我们可以使用SqlPackage.exe
Visual Studio 2012 中的 Microsoft SSDT 来同步数据库,如此处所述,我正在使用它来同步目标数据库,称为TargetDb
,以与存储在 SQL Server 数据库项目中的源数据库对象匹配,称为DbProject
.
/a:Publish
command的操作SqlPackage.exe
允许我们将 DbProject 的 .dacpac 文件同步到 TargetDb,但默认参数不会删除 TargetDb 中不存在的 DbProject 对象。
打开标志/p:DropObjectsNotInSource=true
会解决这个问题,但也会产生奇怪的行为
- 该标志
/p:DropObjectsNotInSource=true
将删除 TargetDb 上的用户/登录对象,这绝对不是预期的!我能找到的最接近的是/p:DropRoleMembersNotInSource=false /p:DropPermissionsNotInSource=false
,但那些没有多大帮助。 - 该标志
/p:DropObjectsNotInSource=true
将打破标志/p:BlockOnPossibleDataLoss=true
,这意味着如果发生数据丢失,更新操作将不会被阻止;那根本不是我想要的。
目前我必须接受 TargetDb 上的“垃圾”/冗余对象 :(
有什么更好的标志可以让我到达那里?