Why does concatenating strings in the argument of EXEC sometimes cause a syntax error in T-SQL?

百般思念 提交于 2019-12-01 15:12:47

问题


In MS SQL Server Management Studio 2005, running this code

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

gives this error: Incorrect syntax near 'CAST'

However, if I do this, it works:

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

I found an explanation here: T-SQL: Cannot pass concatenated string as argument to stored procedure

According to the accepted answer, EXEC can take a local variable or a value as its argument, but not an expression.

However, if that's the case, why does this work:

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

'SELECT * FROM employees WHERE employeeID = ' + @temp sure looks like an expression to me, but the code executes with no errors.


回答1:


The documentation states that EXEC can take either a string variable, a constant T-SQL string, or combinations/concatenations of both of them.

Your "why does this work" example uses a concatenation of a constant T-SQL string and a string variable, and so is perfectly legal.



来源:https://stackoverflow.com/questions/2646492/why-does-concatenating-strings-in-the-argument-of-exec-sometimes-cause-a-syntax

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!