Динамический SQL в SQL Server: выполнение строки через sp_sqlexec @string VS с использованием чисто SQL-запроса - почему хранимая строка не работает? - PullRequest
0 голосов
/ 24 августа 2018
DECLARE @Description NVARCHAR(128) = N'MS_Description'
--Just for good measure
SET @Description = N'MS_Description'

Первое утверждение - я пытаюсь использовать sp_sqlexec, сохраняя свой SQL с динамическими параметрами в строке:

SELECT @query = @query + 'SELECT * FROM TABLE 
                          WHERE COLUMN = ' + @Description
EXEC sp_sqlexec @query

Выше не работает, я получаю следующую ошибку:

Неверное имя столбца 'MS_Description'

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

SELECT * 
FROM table 
WHERE column = @Description

Может ли кто-нибудь объяснить разницу и почему работает нижеследующее, если это то же самое, что хранится в @query? Спасибо

1 Ответ

0 голосов
/ 24 августа 2018

Проблема с первым запросом заключается в том, что вы не добавляете свои кавычки обратно. Он обрабатывает + как конкат, поэтому ваше утверждение в итоге будет

 SELECT * FROM TABLE 
 WHERE COLUMN = MS_Description

Мы знаем, что это не сработает, поскольку MS_Description должно быть 'MS_Description'

То, что вам нужно сделать, чтобы работал верхний

SELECT @query = @query + 'SELECT * FROM TABLE 
                      WHERE COLUMN = ''' + @Description + ''''
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...