Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
可以使用多个参数从PowerShell运行SQL文件_Sql_Sql Server_Powershell - Fatal编程技术网

可以使用多个参数从PowerShell运行SQL文件

可以使用多个参数从PowerShell运行SQL文件,sql,sql-server,powershell,Sql,Sql Server,Powershell,我有一个带有get data的PowerShell脚本,然后运行一个SQL文件,解析它所获得的数据。但是,我不断得到以下错误: Invoke Sqlcmd:用于为Invoke Sqlcmd cmdlet定义新变量的格式无效。请使用“var=value”格式定义新变量 PowerShell脚本: Write-host $ID, $XMLParam, $SourceID $DBParam1 = "ID="+ $ID $DBParam2 = "XMLPARAM="+ $XMLParam $DBPar

我有一个带有get data的PowerShell脚本,然后运行一个SQL文件,解析它所获得的数据。但是,我不断得到以下错误:

Invoke Sqlcmd:用于为Invoke Sqlcmd cmdlet定义新变量的格式无效。请使用“var=value”格式定义新变量

PowerShell脚本:

Write-host $ID, $XMLParam, $SourceID

$DBParam1 = "ID="+ $ID
$DBParam2 = "XMLPARAM="+ $XMLParam
$DBParam3 = "SOURCEID="+ $SourceID

$DBParams = @($DBParam1, $DBParam2, $DBParam3)

$Results = Invoke-Sqlcmd -InputFile "D:\SamHelp\marksheet.sql" -Variable $DBParams -Server $SQLServer -Database 'DB' -Username $Username -Password $Password
declare @id int, @xmlParam xml, @sourceID int

SET @id = '$(ID)'
SET @xmlParam =  '$(XMLPARAM)'
SET @sourceID = '$(SOURCEID)'
...
SQL文件:

Write-host $ID, $XMLParam, $SourceID

$DBParam1 = "ID="+ $ID
$DBParam2 = "XMLPARAM="+ $XMLParam
$DBParam3 = "SOURCEID="+ $SourceID

$DBParams = @($DBParam1, $DBParam2, $DBParam3)

$Results = Invoke-Sqlcmd -InputFile "D:\SamHelp\marksheet.sql" -Variable $DBParams -Server $SQLServer -Database 'DB' -Username $Username -Password $Password
declare @id int, @xmlParam xml, @sourceID int

SET @id = '$(ID)'
SET @xmlParam =  '$(XMLPARAM)'
SET @sourceID = '$(SOURCEID)'
...
powershell中的
写入主机
输出:


001 0000001

无法测试这一点(因此不作为答案发布),但基于其他相关问题的示例(以及),我认为您可能需要在参数值周围加上单引号(至少是XML值,因为它是一个字符串),例如
$DBParam2=“XMLPARAM=”+$XMLPARAM+“”
。不确定是否需要为其他两个执行此操作,因为它们是数字如果$XMLParam是一个包含带双引号的XML的字符串,那么如果@ADyson提供的建议不起作用,则可以尝试另一种方法,即
$DBParam2=“XMLParam=”+$XMLParam.Replace(“,”)
。这将转义SQLCMD脚本变量值中的双引号。