Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

T-SQL:Verkettete Zeichenfolge kann nicht als Argument an gespeicherte Prozedur übergeben werden

Die EXECUTE-Anweisung hat einfach eine andere Grammatik als andere Anweisungen wie SELECT und SET. Beachten Sie zum Beispiel den Syntaxabschnitt oben auf den folgenden beiden Seiten.

EXECUTE-Anweisung:http://msdn.microsoft.com/en-us/ library/ms188332.aspx

SET-Anweisung:http://msdn.microsoft.com/en-us/ library/ms189484.aspx

Die Syntax für EXECUTE akzeptiert nur einen Wert

Wohingegen die Syntax für SET einen Ausdruck akzeptiert

Ein Wert ist im Grunde nur eine hartcodierte Konstante, aber ein Ausdruck wird ausgewertet. Es ist, als hätte man das Varchar 'SELECT 1 + 1'. Im Moment ist es nur ein Varchar-Wert. Sie können jedoch evaluieren die Zeichenfolge wie folgt:

EXEC('SELECT 1 + 1')

Ich nehme an, ich weise nur darauf hin, dass der EXEC-Befehl per Definition keine Ausdrücke zulässt, was Sie anscheinend bereits herausgefunden haben. Ich weiß nicht, was die Entwickler von T-SQL wo beabsichtigt haben, als sie es so gemacht haben. Ich nehme an, die Grammatik würde einfach außer Kontrolle geraten, wenn es Ihnen erlaubt wäre, Unterabfragen innerhalb von Unterabfragen in der Parameterliste einer gespeicherten Prozedur zu werfen.

T-SQL-Ausdruck:http://msdn.microsoft.com/en- us/library/ms190286.aspx