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