Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQLCMD变量的动态值:Setvar_Sql Server_Sqlcmd_Database Project - Fatal编程技术网

Sql server SQLCMD变量的动态值:Setvar

Sql server SQLCMD变量的动态值:Setvar,sql-server,sqlcmd,database-project,Sql Server,Sqlcmd,Database Project,我正在使用Visual Studio 2017数据库项目(Dacpac),发布文件(xml文件)中有一些SQLCMD变量,如下所示- <SqlCmdVariable Include="ClientDBName"> <Value>Client_1</Value> </SqlCmdVariable> DECLARE @dbname varchar(50) SET @dbName = "xyz" :setvar ClientDBName

我正在使用Visual Studio 2017数据库项目(Dacpac),发布文件(xml文件)中有一些SQLCMD变量,如下所示-

<SqlCmdVariable Include="ClientDBName">
  <Value>Client_1</Value>
</SqlCmdVariable>
 DECLARE @dbname varchar(50)  
 SET @dbName = "xyz"  
:setvar ClientDBName @dbName
:setvar ClientDBName "C:\GetDatabaseName.sql"
但这是行不通的。我研究了一下,发现这不管用。我尝试的另一种方法是通过调用下面的脚本来分配dbname值-

<SqlCmdVariable Include="ClientDBName">
  <Value>Client_1</Value>
</SqlCmdVariable>
 DECLARE @dbname varchar(50)  
 SET @dbName = "xyz"  
:setvar ClientDBName @dbName
:setvar ClientDBName "C:\GetDatabaseName.sql"
但这也不起作用


有人能帮我解决这个问题吗?我们如何将动态值分配给SQLCMD变量?

下面的sqlpackage示例命令使用参数指定SQLCMD值。将使用这些值,而不是发布配置文件中的值

SqlPackage.exe /Action:Publish /SourceFile:"YourDatabase.dacpac" /TargetDatabaseName:YourDatabaseName /TargetServerName:"." /Variables:"ClientDBName=YourValue"

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

@DanGuzman,您能举个例子吗?除了指定要部署到哪个数据库之外,您对该客户机/db名称做了什么?你能使用“生成脚本”选项,然后将该脚本推送到多个数据库吗?@PeterSchott,我不知道“生成脚本”选项。你能给我一些关于它的详细信息吗?如果你在VS项目中,不要单击“发布”,而是选择“脚本”选项。如果您使用的是sqlpackage,那么有一个命令行选项来生成脚本,而不是推动更改。请记住,由于变量的原因,您需要在SQLCMD模式下运行该脚本。但它在我的情况下不起作用,因为我有多个数据库,对于每个数据库执行,我需要相应的值。但是这里我们给出了一个固定值。@sunil,你能不能简单地运行sqlpackage多次,每次一个客户端和一个不同的数据库名称?不,我不能……因为这是现有的进程,我们正试图通过在一次执行中执行每个数据库来改变它(因为有N个数据库)。