部署 DacPac 时如何在 SqlPackage.exe 中使用多个 SQLCMD 变量?

Posted

技术标签:

【中文标题】部署 DacPac 时如何在 SqlPackage.exe 中使用多个 SQLCMD 变量?【英文标题】:How to use multiple SQLCMD variables with SqlPackage.exe while deploying a DacPac? 【发布时间】:2015-04-14 05:11:28 【问题描述】:

我正在使用 sqlpackage.exe 部署 dacpac,并且需要为 dacpac 中的部署后脚本传递 SqlCMD 变量。我发现了一个相关的问题here 和here。

但我收到以下错误: 以下 SqlCmd 变量缺少值:BuildVersion 说明。 Description=$Description :术语“Description=$Description”不是 识别为 cmdlet、函数、脚本文件或可操作的名称 程序。检查名称的拼写,或者如果包含路径,请验证 确保路径正确,然后重试。

请帮帮我。

【问题讨论】:

【参考方案1】:

将 SQLCMD 变量传递给 SQLPackage 的正确开关是这样的 /v:Description=$描述

Powershell 引用有点棘手。 这是一个给你的例子:

https://gist.github.com/davoscollective/adf9b890984e51d8dee2

& "C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\sqlpackage.exe" ` #Note this is SQL Server 2012 specific directory, alter as needed
/Action:Publish `
/SourceFile:$sourceFile `
/TargetServerName:$targetServerName `
/TargetDatabaseName:$targetDBname `
/V:SQLCMDVariable1=$SQLCMDVariable1 ` #If your project includes other database references, or pre/post deployment scripts uses SQLCMD variables
/v:SQLCMDVariable2=$SQLCMDVariable2 `

【讨论】:

【参考方案2】:

您似乎正在使用 Powershell 根据 cmdlet 错误调用 SqlPackage。如果是这种情况,请确保使用倒撇号转义美元符号,即

即描述=`$描述

你能发布你传递的完整命令吗?

【讨论】:

以上是关于部署 DacPac 时如何在 SqlPackage.exe 中使用多个 SQLCMD 变量?的主要内容,如果未能解决你的问题,请参考以下文章

由于缺少对象,DACPAC 无法部署

如何在没有实际部署的情况下测试 DACPAC 是不是可以部署

使用 CLI 工具 (sqlpackage.exe / PS dbatools) 时通过 BACPAC / DACPAC 导入数据库在用户上失败

在发布期间忽略 Dacpac 快照选项

在 DACPAC 部署中使用 SQL 变量来区分权限

如何使用sqlpackage.exe生成重命名表的脚本?