SQLCMD变量的动态值:Setvar



我正在使用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变量分配动态值?

下面的sqlpackage示例命令使用/Variables:参数指定SQLCMD值。将使用这些值,而不是发布配置文件中的值。
SqlPackage.exe /Action:Publish /SourceFile:"YourDatabase.dacpac" /TargetDatabaseName:YourDatabaseName /TargetServerName:"." /Variables:"ClientDBName=YourValue"

如果您的实际需要是发布的数据库名称,则可以使用内置的DatabaseNameSQLCMD变量,而不是用户定义的SQLCMD值,即/TargetDatabaseName值。

最新更新