为什么在EXEC的参数中连接字符串有时会导致T-SQL中出现语法错误?

时间:2010-04-15 15:07:41

标签: tsql exec concatenation

在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: Cannot pass concatenated string as argument to stored procedure

根据接受的答案,EXEC可以将局部变量或值作为参数,但不能作为表达式。

但是,如果是这种情况,为什么会这样做:

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

'SELECT * FROM employees WHERE employeeID = ' + @temp肯定看起来像是一个表达式,但代码执行没有错误。

1 个答案:

答案 0 :(得分:10)

The documentation表示EXEC可以采用字符串变量,常量T-SQL字符串或两者的组合/连接。

您的“为什么这个工作”示例使用常量T-SQL字符串和字符串变量的串联,因此完全合法。