可以使用多个参数从PowerShell运行SQL文件
我有一个带有get data的PowerShell脚本,然后运行一个SQL文件,解析它所获得的数据。但是,我不断得到以下错误: Invoke Sqlcmd:用于为Invoke Sqlcmd cmdlet定义新变量的格式无效。请使用“var=value”格式定义新变量 PowerShell脚本:可以使用多个参数从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
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脚本变量值中的双引号。