Передача параметров в динамический SQL

Передача параметров в динамический SQLАвтор: Konstantin Kosinsky


Сегодня потребовалось передать SQL параметр в динамический SQL запрос именно как параметр, а не путем конкатенации строк. Причина довольно простая, значение параметра приходит от клиента, и если я сделаю конкатенацию, то сразу попаду в область SQL Injection, чего бы мне не хотелось.

Первая идея которая возникла — это воспользоваться выражением EXECUTE. Но проблема в том, что если EXECUTE использовать в контексте

, то есть, когда имя хранимой процедуры задано явно, передача параметров не вызывает вопросов.

Но если я хочу, динамический SQL:

, то конечно же получаю ошибку.

На такую же проблему натолкнулся наш коллега работая с динамическим SQL и полем ntext Как обработать тип ntext,image в T-SQL.

Но все-таки решение было найдено, и этим решением  есть системная хранимая процедура sp_executesql, которая выглядит следующим образом:

,где @query — динамически составленный запрос, @parameters — описание параметров передаваемых в запрос.

В результате у меня получилась следующая процедура:

Запись опубликована в рубрике Полезно и интересно с метками . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Войти с помощью: