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