Heim >Datenbank >MySQL-Tutorial >Wie behandelt man Ausdrucksergebnisse als gespeicherte Prozedurparameter in SQL Server?
Herausforderungen bei gespeicherten SQL Server-Prozedurparametern
Die Verwendung von Parametern mit gespeicherten Prozeduren optimiert die Datenbankentwicklung. Das direkte Einbetten von Ausdrucks- oder Funktionsergebnissen in die Parameterliste einer gespeicherten Prozedur kann jedoch zu Problemen führen. Zum Beispiel der folgende Code:
<code class="language-sql">DECLARE @pID int; SET @pID = 1; EXEC WriteLog 'Component', 'Source', 'Could not find given id: ' + CAST(@pID AS varchar);</code>
schlägt in SQL Server 2005 und früheren Versionen fehl und erzeugt den Syntaxfehler „Msg 102“. Diese Einschränkung ergibt sich aus der Art und Weise, wie SQL Server mit Parametern umgeht.
Die Lösung: Zwischenvariablen
Die Problemumgehung besteht darin, eine Zwischenvariable zu verwenden. SQL Server erlaubt keine direkte Einbettung von Ausdrucksergebnissen als Parameter; Eine Zwischenvariable bietet jedoch eine Lösung.
Die korrigierte Syntax lautet:
<code class="language-sql">DECLARE @pID INT; SET @pID = 1; /* For SQL Server 2008 and later; For earlier versions, these must be separate statements */ DECLARE @string VARCHAR(50) = 'Could not find given id: ' + CAST(@pID AS VARCHAR(11)); EXEC WriteLog 'Component', 'Source', @string;</code>
Indem wir die Ausgabe des Ausdrucks („Angegebene ID konnte nicht gefunden werden: ' CAST(@pID AS VARCHAR(11))) der Variablen @string
zuweisen, können wir dann @string
als Parameter an WriteLog
übergeben. das Ergebnis des Ausdrucks effektiv einzubeziehen. Beachten Sie den wichtigen Unterschied für Versionen vor SQL Server 2008, die separate DECLARE
- und SET
-Anweisungen erfordern.
Das obige ist der detaillierte Inhalt vonWie behandelt man Ausdrucksergebnisse als gespeicherte Prozedurparameter in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!