我有一个存储过程,其参数类型为nvarchar(max)
。我需要在PowerShell中调用它。
// $s can be a long string with all kind of charaters, ', new line, etc.
Invoke-Sqlcmd -ServerInstance Server "exec MyProc '$s'"
但是,当
$s
具有'
(我知道我可以通过将'
'替换为''
但是可以处理这种情况)或\n\r
等时,上述调用无法正常工作。这也有SQL注入(inject)的风险。是否可以在没有字符串连接的情况下调用存储的方法?
最佳答案
对-Variable
使用Invoke-Sqlcmd
参数。
$vars = @("VAR1=$s")
Invoke-SqlCmd -ServerInstance Server "exec MyProc @procParam=`$(VAR1)" -Variable $vars
这将自动转义特殊字符并避免SQL注入(inject)。
我相信(如果我错了,请纠正我)您需要声明要传递给存储过程的参数。那就是上面代码中的
@procParam
。注意:反引号(ott_code)很重要,因为否则字符串将在到达函数之前被扩展,这将导致错误。您也可以将引号切换为单引号,这样就不需要反引号了。
编辑
重要的是要注意
`$
仅接受String数组。这意味着要删除单个值,必须使用语法-Variable
表示数组(如示例中所示)。引用:
@()
关于sql-server - 运行Invoke-SqlCmd时传递字符串参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56977602/