4

我在 Visual Studio 中有一个 SQL Server 数据库项目,并且我已经删除了一个现有的存储过程。我在本地也有一个数据库,其中存在确切的存储过程。

当我从 Visual Studio 中对两者运行架构比较时,在生成的架构比较窗口中,我可以看到将在生成的部署脚本中删除的存储过程。但是,当我从 Powershell 脚本调用 sqlPackage.exe 时,生成的部署脚本不包含存储过程的删除语句。有趣的是,当我对存储过程进行更改时,它会包含在生成的部署脚本中,并带有一条 alter 语句。

为什么 sqlPackage.exe 在我删除它但包含它以进行更改时省略了删除存储过程语句?我觉得这是我需要提供给 sqlPackage.exe 的参数设置,但它们似乎选择退出,而不是选择加入(https://msdn.microsoft.com/library/hh550080(vs.103).aspx#Anchor_7)。

以下是我从 Powershell 发出的命令:

& 'sqlPackage' '/Action:Script' "/SourceFile:$sourceDacpacFile" "/TargetFile:$targetDacpacFile" "/OutputPath:$outputPath" "/TargetDatabaseName:$targetDatabaseName" "/p:AllowIncompatiblePlatform=$allowIncompatiblePlatform" "/p:BlockOnPossibleDataLoss=$blockOnPossibleDataLoss" "/p:DropIndexesNotInSource=$dropIndexesNotInSource"
4

1 回答 1

7

看一下属性DropObjectsNotInSource

指定当您发布到数据库时,是否将从目标数据库中删除数据库快照 (.dacpac) 文件中不存在的对象。此值优先于 DropExtendedProperties。

默认为False请参阅:DacDeployOptions.DropObjectsNotInSource 属性

于 2016-12-07T11:01:58.180 回答