2010-04-15 1 views
10

In MS SQL Server Management Studio 2005, diesen Code ausgeführt wirdWarum verursachen verkettete Strings im Argument von EXEC manchmal einen Syntaxfehler in T-SQL?

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

gibt diesen Fehler: Incorrect syntax near 'CAST'

Allerdings, wenn ich das tue, funktioniert es:

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

fand ich eine Erklärung hier: T-SQL: Cannot pass concatenated string as argument to stored procedure

Nach der angenommenen Antwort kann EXEC ein nehmen lokale Variable oder ein Wert als Argument, aber kein Ausdruck.

Wenn dies jedoch der Fall ist, warum funktionierts:

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

'SELECT * FROM employees WHERE employeeID = ' + @temp sicher sieht aus wie ein Ausdruck für mich, aber der Code ausführt, ohne Fehler.

Antwort

9

The documentation besagt, dass EXEC entweder eine String-Variable, eine konstante T-SQL-Zeichenfolge oder Kombinationen/Verkettungen von beiden annehmen kann.

Ihr Beispiel "Warum funktioniert das?" Verwendet eine Verkettung einer konstanten T-SQL-Zeichenfolge und einer Zeichenfolgenvariablen und ist daher vollkommen legal.

+0

Danke für die Antwort –

Verwandte Themen