我正在使用powershell和Invoke-SqlCmd。我能够将变量传递给SQL:
$variables = @( "MyVariable='hello'" )
Invoke-SqlCmd `
-ServerInstance 'localhost' `
-Database 'master' `
-Username 'matthew' `
-Password 'qwerty' `
-Query 'SELECT $(MyVariable) AS foo' `
-Variable $variables这让我回到了预期的hello。但是,如果我有一个包含等于(=)的值的变量:
$variables = @("MyVariable='aGVsbG8NCg=='") # base64 encoded 'hello'它给出了以下错误:
用于为
Invoke-Sqlcmdcmdlet定义新变量的格式无效。请使用“var=value”格式定义一个新变量。
我在sqlcmd或Invoke-SqlCmd上找不到任何关于如何正确转义值的文档。
如何转义发送到sqlcmd / Invoke-SqlCmd的变量
发布于 2016-02-02 16:23:44
在调查之后使用了一些关于
C:\程序文件(x86)\Microsoft Server\120\Tools\PowerShell\Modules\SQLPS\Microsoft.SqlServer.Management.PSSnapins.dll
查看ExecutionProcessor的构造函数,下面的行显示了一个问题:如果变量定义中有多个相等号,它就会失败。
对于其他尝试使用Invoke-SqlCmd的人来说,我的建议是节省您的时间和理智,而只是使用开源替代Invoke-SqlCmd2。
微软,请修理一下。
发布于 2019-11-01 08:15:37
使用CHAR(61)替换等号。
$variable = "'Hello=World'"
$variables = @( "MyVariable=$($variable.replace("=","'+CHAR(61)+'"))" )
Invoke-SqlCmd -ServerInstance 'localhost' -Database 'master' -Query 'SELECT $(MyVariable) AS foo' -Variable $variables发布于 2017-08-23 20:57:59
我最近讨论了这个问题,并成功地使用了TheMadTechnician的答案:
Replace Single Quotes in PowerShell Or Excel CSV
答案是在字符串中创建子表达式,将“”替换为“”。
Invoke-Sqlcmd -ServerInstance "$SQLServer" -Database "$SqlDB" -query "INSERT INTO dbo.ecca_sw_standard_2 (name, version, product_id) VALUES (N'$($CSVAppName -replace "'", "''")', N'$($CSVVersion -replace "'", "''")' , N'$($CSVAppID -replace "'", "''")')"这样,当字符串展开时,就会适当地转义以进行SQL插入。
https://stackoverflow.com/questions/35157090
复制相似问题