Почему объединение строк в аргументе EXEC иногда вызывает синтаксическую ошибку в T-SQL? - PullRequest
11 голосов
/ 15 апреля 2010

В MS SQL Server Management Studio 2005 выполняется этот код

EXEC('SELECT * FROM employees WHERE employeeID = ' + CAST(3 AS VARCHAR))

выдает эту ошибку: Incorrect syntax near 'CAST'

Однако, если я сделаю это, это сработает:

DECLARE @temp VARCHAR(4000)
SET @temp = 'SELECT * FROM employees WHERE employeeID = ' + CAST(3 AS VARCHAR)
EXEC(@temp)

Я нашел объяснение здесь: T-SQL: невозможно передать каскадную строку в качестве аргумента хранимой процедуре

Согласно принятому ответу, EXEC может принимать в качестве аргумента локальную переменную или значение, но не выражение.

Однако, если это так, почему это работает:

DECLARE @temp VARCHAR(4000)
SET @temp = CAST(3 AS VARCHAR)
EXEC('SELECT * FROM employees WHERE employeeID = ' + @temp)

'SELECT * FROM employees WHERE employeeID = ' + @temp конечно, выглядит как выражение для меня, но код выполняется без ошибок.

1 Ответ

10 голосов
/ 15 апреля 2010

Документация гласит, что EXEC может принимать либо строковую переменную, постоянную строку T-SQL, либо комбинации / конкатенации обоих.

В вашем примере «почему это работает» используется конкатенация константной строки T-SQL и строковой переменной, и поэтому он вполне допустим.

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