使用 msdeploy 将 SQLCMD 变量传递给 dbDacFx 提供程序

Posted

技术标签:

【中文标题】使用 msdeploy 将 SQLCMD 变量传递给 dbDacFx 提供程序【英文标题】:pass SQLCMD variables to dbDacFx provider with msdeploy 【发布时间】:2013-11-21 21:15:12 【问题描述】:

我目前正在使用 msdeploy 的 dbDacFx 提供程序将 .dacpac 部署到数据库。 dacpac 需要三个 SQLCMD 变量。我使用的语法如下所示:

-setParam:kind=SqlCommandVariable,scope=Database.dacpac,match=foo1,value="foo1 value"

我一直在尝试我能找到的一切,但不幸的是,几乎没有关于这个过程的文档。我从 msdeploy 得到的输出是 Missing values for the following SqlCmd variables: foo1 foo2 foo3

如果有人能发现我做错了什么,那就太好了。如果有人知道在哪里可以获得一些很棒的文档。我很乐意接受任何说明我应该做什么的答案,但我很想了解所有这些价值观是什么以及为什么我做错了。

编辑: 此时,dbDacFx 似乎不存在这样的选项。我们使用此功能的用例是尝试将相同的模板数据库(在 Visual Studio sql 项目中管理)部署到 70 多个数据库,我们希望并行执行。 dbSqlPackage(除了被弃用)不是线程安全的,并且不允许并行部署。 dbDacFx 克服了这个缺点,但是它不能(在我的实验中)通过驻留在项目级别的 SqlCmdVariables,并且它不能像 dbSqlPackage 那样使用发布配置文件。我正在与网络部署团队的成员联系,如果我能够弄清楚如何克服这些缺点,我会发布任何更新。

【问题讨论】:

【参考方案1】:

在向 MSDeploy 团队的一些 Microsoft 员工发送电子邮件后......事实证明,目前这是不可能的,但可能会考虑在未来发布。

【讨论】:

你听说过这方面的消息吗? MSDeploy 在满足我们的数据库部署需求方面表现出很大的希望,但是经过数小时追逐毫无意义的错误消息而没有明显的日志记录/诊断,我现在认为它不支持我们想要做的事情。非常令人沮丧。 还没有听到任何消息......我和我的同事接受了 Sql Server 团队提供的 SqlPackage 产品,并将其包装成一种输出脚本的方式,我们可以清除我们不使用的语句'不想要(在我们的例子中,drop user .*?;。之后,我们使用 SQLCMD 执行脚本,再次包装在同一个工具中。事实证明,对于我们而言,它是最快的部署选项。

以上是关于使用 msdeploy 将 SQLCMD 变量传递给 dbDacFx 提供程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PowerShell 和 SQLCMD 获取存储过程返回值?

db2cmd如何执行sql文件并传递参数?

JAVA在数据库中插入日期,日期由字符串变量传递值,占位符?要用单引号吗,怎么写?

如何在预脚本中更改 SSDT SQLCMD 变量?

路径中的 SQLCMD 变量

Visual Studio 数据库项目 - 使用 SQLCMD 变量定义文件大小