我有一个存储过程,其参数类型为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/

10-14 15:54
查看更多