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

Posted by Tim Goodman on Stack Overflow See other posts from Stack Overflow or by Tim Goodman
Published on 2010-04-15T15:07:41Z Indexed on 2010/05/02 11:17 UTC
Read the original article Hit count: 229

Filed under:
|
|

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: http://stackoverflow.com/questions/1044831/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.

© Stack Overflow or respective owner

Related posts about tsql

Related posts about concatenation