我正在使用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变量分配动态值?
/Variables:
参数指定SQLCMD值。将使用这些值,而不是发布配置文件中的值。
SqlPackage.exe /Action:Publish /SourceFile:"YourDatabase.dacpac" /TargetDatabaseName:YourDatabaseName /TargetServerName:"." /Variables:"ClientDBName=YourValue"
如果您的实际需要是发布的数据库名称,则可以使用内置的DatabaseName
SQLCMD变量,而不是用户定义的SQLCMD值,即/TargetDatabaseName
值。