В 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
верные взгляды как выражение мне, но код выполняется без ошибок.
Документация утверждает, что EXEC
может принимать либо строковую переменную, либо постоянную строку T-SQL, либо их комбинации / конкатенации.
В вашем примере «Почему это работает?» Используется конкатенация постоянной строки T-SQL и строковой переменной, что делает его совершенно допустимым.