Heim >Datenbank >MySQL-Tutorial >Wie kann ich Ausdrucksergebnisse als Parameter an gespeicherte SQL Server-Prozeduren übergeben?

Wie kann ich Ausdrucksergebnisse als Parameter an gespeicherte SQL Server-Prozeduren übergeben?

Linda Hamilton
Linda HamiltonOriginal
2025-01-11 17:22:45847Durchsuche

How Can I Pass Expression Results as Parameters to SQL Server Stored Procedures?

Ausdruckseingabe als Parameter einer gespeicherten Prozedur verwenden

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn