Используйте параметр -Variable
для Invoke-Sqlcmd
.
$vars = @("VAR1=$s")
Invoke-SqlCmd -ServerInstance Server "exec MyProc @procParam=`$(VAR1)" -Variable $vars
Это автоматически исключит специальные символы и позволит избежать внедрения SQL.
Я верю (исправьте меня, если я ошибаюсь)) вам нужно указать параметр, который вы передаете для хранимых процедур.Вот что означает @procParam
в приведенном выше коде.
Примечание. Знак доллара в обратном направлении (`$
) важен, так как в противном случае строка будет расширена до того, как достигнет функции, что приведет к ошибке.,Вы также можете переключить кавычки на одинарные, что делает обратную галочку необязательной.
EDIT
Важно отметить, что -Variable
принимает только массив String.Это означает, что для delcare отдельного значения необходимо использовать синтаксис @()
для обозначения массива (как в примере).
Ссылка: Invoke-Sqlcmd