【发布时间】:2016-05-11 11:19:27
【问题描述】:
我正在使用 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 的变量?
【问题讨论】:
-
不仅
-Variable有嵌入=的问题,它也没有参数化SQL命令。它将name=value子句中=之后的任何内容替换到SQL 文本中,这就是您需要将value放在单引号中的原因——它们没有被特殊处理,它们只是被转储到SQL 中.如果参数值来自外部,您必须自己将其转义以使其成为有效且安全的 SQL 字符串文字,并用单引号完成,然后再将其传递给Invoke-SqlCmd。
标签: sql-server windows powershell sqlcmd invoke-sqlcmd