SqlPackage.exe 和 MsBuild SqlPublishTask 之间的差异
Differences between SqlPackage.exe and MsBuild SqlPublishTask
我正在尝试生成一个输出 dacpac 文件,然后我可以将该文件部署到不同的环境。到目前为止,我一直使用目标发布直接从 msbuild 进行部署,例如:
msbuild dbproject.sqlproj /t:Build;Publish /p:SqlPublishProfilePath=test.publish.xml /p:UpdateDatabase=True /p:PublishScriptFileName=test.sql
生成的输出脚本的大小(仅供参考,因为 UpdateDatabase 设置为 true)为 2.5MB。
我的新方法是只构建项目,存储 dacpac,然后使用带有操作的 sqlpackage 进行部署 'Publish'。此新方法报告了一些 msbuild SqlPublishTask 未报告的警告。
供参考我运行下一个命令:
sqlpackage.exe /action:script /outputpath:test.sql /sourcefile:dbproject.dacpac /pr:test.publish.xml
输出脚本的大小现在是 4.9MB。
具体报的warnings不是这里关心的,关心的是脚本不一样,我的问题是有什么区别?
更重要的是,哪个是 best/safest 部署方法?
Sqlpackage.exe 更详细并且在部署期间包含更多对象,它将权限降低到 tables 以避免在修改对象期间进行任何修改,然后继续创建或修改他们。
不同之处在于,所有对象都包含在 sqlpackage 的脚本中,与它们是否与目标数据库不同无关。
尽管最初给出的警告不是问题,但使用 sqlpackage 方法我发现一些存储过程不在解决方案中,只在数据库中。这些 'orphan' sp 正在引用正在部署的 tables,这会发出警告,指出 table 中的更改可能会破坏 sp.
我正在尝试生成一个输出 dacpac 文件,然后我可以将该文件部署到不同的环境。到目前为止,我一直使用目标发布直接从 msbuild 进行部署,例如:
msbuild dbproject.sqlproj /t:Build;Publish /p:SqlPublishProfilePath=test.publish.xml /p:UpdateDatabase=True /p:PublishScriptFileName=test.sql
生成的输出脚本的大小(仅供参考,因为 UpdateDatabase 设置为 true)为 2.5MB。
我的新方法是只构建项目,存储 dacpac,然后使用带有操作的 sqlpackage 进行部署 'Publish'。此新方法报告了一些 msbuild SqlPublishTask 未报告的警告。
供参考我运行下一个命令:
sqlpackage.exe /action:script /outputpath:test.sql /sourcefile:dbproject.dacpac /pr:test.publish.xml
输出脚本的大小现在是 4.9MB。
具体报的warnings不是这里关心的,关心的是脚本不一样,我的问题是有什么区别?
更重要的是,哪个是 best/safest 部署方法?
Sqlpackage.exe 更详细并且在部署期间包含更多对象,它将权限降低到 tables 以避免在修改对象期间进行任何修改,然后继续创建或修改他们。
不同之处在于,所有对象都包含在 sqlpackage 的脚本中,与它们是否与目标数据库不同无关。
尽管最初给出的警告不是问题,但使用 sqlpackage 方法我发现一些存储过程不在解决方案中,只在数据库中。这些 'orphan' sp 正在引用正在部署的 tables,这会发出警告,指出 table 中的更改可能会破坏 sp.