Передать строковый параметр при запуске Invoke-SqlCmd? - PullRequest
2 голосов
/ 10 июля 2019

У меня есть хранимая процедура с параметром типа 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 голосов
/ 10 июля 2019

Используйте параметр -Variable для Invoke-Sqlcmd.

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

Это автоматически исключит специальные символы и позволит избежать внедрения SQL.

Я верю (исправьте меня, если я ошибаюсь)) вам нужно указать параметр, который вы передаете для хранимых процедур.Вот что означает @procParam в приведенном выше коде.

Примечание. Знак доллара в обратном направлении (`$) важен, так как в противном случае строка будет расширена до того, как достигнет функции, что приведет к ошибке.,Вы также можете переключить кавычки на одинарные, что делает обратную галочку необязательной.

EDIT

Важно отметить, что -Variable принимает только массив String.Это означает, что для delcare отдельного значения необходимо использовать синтаксис @() для обозначения массива (как в примере).

Ссылка: Invoke-Sqlcmd

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...