【问题标题】:Differences between SqlPackage.exe and MsBuild SqlPublishTaskSqlPackage.exe 和 MsBuild SqlPublishTask 的区别
【发布时间】:2015-08-05 18:39:36
【问题描述】:

我正在尝试生成一个输出 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 进行部署。这种新方法报告了一些 msbuild SqlPublishTask 未报告的警告。
作为参考,我运行了下一个命令:

sqlpackage.exe /action:script /outputpath:test.sql /sourcefile:dbproject.dacpac /pr:test.publish.xml

现在输出脚本的大小为 4.9MB。
报告的具体警告不是这里关心的问题,关心的是脚本不同,我的问题是有什么区别?
更重要的是,哪一种是最好/最安全的部署方法?

【问题讨论】:

    标签: sql-server msbuild sqlpackage


    【解决方案1】:

    Sqlpackage.exe 更详细,在部署过程中包含更多对象,它会删除对表的权限以避免在修改对象期间进行任何修改,然后继续创建或修改它们。
    不同之处在于所有对象都包含在 sqlpackage 的脚本中,与它们是否与目标数据库不同。

    虽然给出的警告最初并不是问题,但使用 sqlpackage 方法我发现一些存储过程不在解决方案中,只在数据库中。这些“孤儿” sp 正在引用正在部署的表,这会发出警告,指出表中的更改可能会破坏 sp。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-20
      • 2013-08-31
      • 1970-01-01
      • 2017-08-18
      • 2019-06-28
      • 1970-01-01
      • 2010-11-07
      相关资源
      最近更新 更多