2010-04-15 7 views
10

In MS SQL Server Management Studio 2005, l'esecuzione di questo codicePerché la concatenazione di stringhe nell'argomento di EXEC causa talvolta un errore di sintassi in T-SQL?

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

dà questo errore: Incorrect syntax near 'CAST'

Tuttavia, se faccio questo, funziona:

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

ho trovato una spiegazione qui: T-SQL: Cannot pass concatenated string as argument to stored procedure

In base alla risposta accettata, EXEC può richiedere un variabile locale o un valore come argomento, ma non un'espressione.

Tuttavia, se questo è il caso, perché fa questo lavoro:

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

'SELECT * FROM employees WHERE employeeID = ' + @temp sembra certo, come un'espressione a me, ma il codice viene eseguito senza errori.

risposta

9

The documentation afferma che EXEC può richiedere una variabile stringa, una stringa T-SQL costante o combinazioni/concatenazioni di entrambi.

L'esempio "perché funziona" utilizza una concatenazione di una stringa T-SQL costante e una variabile stringa, quindi è perfettamente legale.

+0

Grazie per la risposta –