【发布时间】:2020-06-15 15:37:51
【问题描述】:
我正在使用 Visual Studio 2017 数据库项目 (Dacpac),并且我在发布文件(在 xml 文件中)中有一些 SQLCMD 变量,如下所示-
<SqlCmdVariable Include="ClientDBName">
<Value>Client_1</Value>
</SqlCmdVariable>
我的问题是,我们有多个客户端,并且我们正在一次为多个客户端部署 dacpac 的数据库更改。因此,如果我像上面的示例一样为我的 SQLCMD 变量“ClientDBName”分配静态值,它将为所有客户端采用相同的值(相同的数据库名称“Client_1”)。
为了解决这个问题,我正在使用 PreDeployment 脚本。我试图将动态值或数据库名称分配给 SQLCMD 变量“CleintDBName”。如下-
DECLARE @dbname varchar(50)
SET @dbName = "xyz"
:setvar ClientDBName @dbName
但这不起作用。我探索了它,发现这行不通。我尝试做的另一种方法是通过调用下面的脚本来分配 dbname 值-
:setvar ClientDBName "C:\GetDatabaseName.sql"
但这也行不通。
那么任何人都可以帮我解决这个问题,我们如何将动态值分配给 SQLCMD 变量?
【问题讨论】:
-
@DanGuzman,你能举个例子吗?
-
除了指定要部署到哪个数据库之外,您还使用该客户端/数据库名称做什么?您可以使用“生成脚本”选项,然后将该脚本推送到多个数据库吗?
-
@PeterSchott,我不知道“生成脚本”选项。你能告诉我更多关于它的细节吗?
-
如果您在 VS 项目中,请选择“脚本”选项,而不是单击“发布”。如果您使用的是 sqlpackage,则有一个命令行选项可以生成脚本,而不是推送更改。请记住,由于变量,您需要在 SQLCMD 模式下运行该脚本。 docs.microsoft.com/en-us/sql/tools/sqlpackage
标签: sql-server sqlcmd database-project