Как выполнить текст SQL, передаваемый в качестве параметра sp? - PullRequest
2 голосов
/ 18 февраля 2010

У меня есть хранимая процедура с параметром nvarchar.Я ожидаю, что вызывающие абоненты предоставят текст для команды sql при использовании этого SP.

Как выполнить предоставленную команду sql из SP?

Возможно ли это?*

EXEC @script

ошибки, указывающие на невозможность найти хранимую процедуру по заданному имени.Поскольку это скрипт, он, очевидно, точен, но заставляет меня думать, что он работает не так, как ожидалось.

Ответы [ 4 ]

8 голосов
/ 18 февраля 2010

Использование:

BEGIN

  EXEC sp_executesql @nvarchar_parameter

END

... при условии, что параметр является полным запросом SQL. Если нет:

DECLARE @SQL NVARCHAR(4000)
SET @SQL = 'SELECT ...' + @nvarchar_parameter

BEGIN

  EXEC sp_executesql @SQL

END

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

0 голосов
/ 18 февраля 2010

Как выполнить предоставленную команду sql из SP?

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

Чтобы быть уверенным в этом, вам нужно создать отдельную учетную запись пользователя, которая имеет разрешения dbreader только для небольшого набора разрешенных таблиц / представлений, и использовать команду EXECUTE AS , чтобы ограничить контекст этим пользователь.

0 голосов
/ 18 февраля 2010

Вы используете EXECUTE, передавая команду в виде строки. Обратите внимание, что это может открыть вашу систему для серьезных уязвимостей, учитывая, что трудно проверить не вредоносность операторов SQL, которые вы выполняете вслепую.

0 голосов
/ 18 февраля 2010

Вы можете просто выполнить @sqlStatement из своего sp. Тем не менее, это не лучшее, что можно сделать, потому что он открывает для вас инъекции SQL. Вы можете увидеть пример здесь

...