Beim Erstellen einer gespeicherten Prozedur kann es zu Schwierigkeiten kommen, das Ergebnis eines Ausdrucks als Parameter zu verwenden. Hier ist ein Beispiel:
<code class="language-sql">DECLARE @pID int; SET @pID = 1; EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>
Dieser Code löst jedoch einen Fehler aus (SQL Server 2005):
<code>Msg 102, Level 15, State 1, Line 4 Incorrect syntax near '+'.</code>
Erklärung zu Grammatikfehlern
SQL Server erlaubt solche Vorgänge in Parameterlisten nicht. Es erwartet, dass es sich bei den Argumenten um Literalwerte, deklarierte Variablen oder Ausdrücke ohne Operatoren handelt.
Lösung: Zwischenvariablen verwenden
Um dieses Problem zu lösen, müssen Sie eine Zwischenvariable verwenden. Der korrigierte Code unten veranschaulicht diesen Ansatz:
<code class="language-sql">DECLARE @pID INT; SET @pID = 1; DECLARE @logMessage VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11)); EXEC WriteLog 'Component', 'Source', @logMessage;</code>
Exec-Anweisungssyntax
Als Referenz lautet die Syntax der EXEC-Anweisung wie folgt:
<code class="language-sql">[ { EXEC | EXECUTE } ] { [ @return_status = ] { module_name [ ;number ] | @module_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] } ] [ ,...n ] [ WITH <execute_option> [ ,...n ] ] } [;]</execute_option></code>
Aktuelle Einschränkungen
In SQL Server sind akzeptable Werte für Parameter in Parameterlisten auf Literalwerte und Systemfunktionen mit dem Präfix @@ beschränkt. Funktionen wie SCOPE_IDENTITY() werden nicht unterstützt.
Das obige ist der detaillierte Inhalt vonWie kann ich Ausdrucksergebnisse als Parameter an gespeicherte SQL Server-Prozeduren übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!