我有一个存储过程,其参数类型为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注入的风险。
这是一种无需字符串连接即可调用存储的方法吗?
答案 0 :(得分:-1)
将-Variable
参数用于Invoke-Sqlcmd
。
$vars = @("VAR1=$s")
Invoke-SqlCmd -ServerInstance Server "exec MyProc @procParam=`$(VAR1)" -Variable $vars
这将自动转义特殊字符并避免SQL注入。
我相信(如果我错了,请纠正我),您需要声明要传递给存储过程的参数。这就是上面代码中的@procParam
。
注意:反引号(`$
)很重要,因为否则字符串将在到达函数之前被扩展,这将导致错误。您也可以将引号切换为单引号,这样就不需要反引号了。
请注意,-Variable
仅接受String数组。这意味着要删除单个值,必须使用语法@()
来表示一个数组(如示例中所示)。