首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sqlcmd / Invoke-SqlCmd中的转义变量

sqlcmd / Invoke-SqlCmd中的转义变量
EN

Stack Overflow用户
提问于 2016-02-02 15:12:29
回答 3查看 9.1K关注 0票数 12

我正在使用powershell和Invoke-SqlCmd。我能够将变量传递给SQL:

代码语言:javascript
复制
$variables = @( "MyVariable='hello'" )

Invoke-SqlCmd `
    -ServerInstance 'localhost' `
    -Database 'master' `
    -Username 'matthew' `
    -Password 'qwerty' `
    -Query 'SELECT $(MyVariable) AS foo' `
    -Variable $variables

这让我回到了预期的hello。但是,如果我有一个包含等于(=)的值的变量:

代码语言:javascript
复制
$variables = @("MyVariable='aGVsbG8NCg=='") # base64 encoded 'hello'

它给出了以下错误:

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

我在sqlcmdInvoke-SqlCmd上找不到任何关于如何正确转义值的文档。

如何转义发送到sqlcmd / Invoke-SqlCmd的变量

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

微软,请修理一下。

票数 16
EN

Stack Overflow用户

发布于 2019-11-01 08:15:37

使用CHAR(61)替换等号。

代码语言:javascript
复制
$variable = "'Hello=World'"
$variables = @( "MyVariable=$($variable.replace("=","'+CHAR(61)+'"))" )

Invoke-SqlCmd -ServerInstance 'localhost' -Database 'master' -Query 'SELECT $(MyVariable) AS foo' -Variable $variables
票数 7
EN

Stack Overflow用户

发布于 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插入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35157090

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档