运行Invoke-SqlCmd时传递字符串参数?

时间:2019-07-10 19:41:13

标签: sql-server powershell

我有一个存储过程,其参数类型为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注入的风险。

这是一种无需字符串连接即可调用存储的方法吗?

1 个答案:

答案 0 :(得分:-1)

-Variable参数用于Invoke-Sqlcmd

$vars = @("VAR1=$s")
Invoke-SqlCmd -ServerInstance Server "exec MyProc @procParam=`$(VAR1)" -Variable $vars

这将自动转义特殊字符并避免SQL注入。

我相信(如果我错了,请纠正我),您需要声明要传递给存储过程的参数。这就是上面代码中的@procParam

注意:反引号(`$)很重要,因为否则字符串将在到达函数之前被扩展,这将导致错误。您也可以将引号切换为单引号,这样就不需要反引号了。

编辑

请注意,-Variable仅接受String数组。这意味着要删除单个值,必须使用语法@()来表示一个数组(如示例中所示)。

参考:Invoke-Sqlcmd