Почему делает конкатенирующие строки в аргументе ДОЛЖНОСТНОГО ЛИЦА, иногда вызывают синтаксическую ошибку в T-SQL?

В Studio управления SQL Server MS 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 верные взгляды как выражение мне, но код выполняется без ошибок.

11
задан Community 23 May 2017 в 11:48
поделиться

1 ответ

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

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

10
ответ дан 3 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: