By: Greg Robidoux
Übersicht
Die wirkliche Macht der gespeicherten Prozeduren ist die Fähigkeit, Parameter zu übergeben und habendie gespeicherte Prozedur behandelt die unterschiedlichen Anforderungen, die gestellt werden. In thistopic werden wir uns mit der Übergabe von Parameterwerten an eine gespeicherte Prozedur befassen.
Erklärung
Genau wie Sie Parameter mit Ihrem SQL-Code verwenden können, können Sie Ihre gespeicherten Prozeduren auch so einrichten, dass Sie einen oder mehrere Parameterwerte akzeptieren. Allexamples verwenden theAdventureWorks Datenbank.,
Erstellen einer gespeicherten SQL-Prozedur mit Parametern
- Erstellen einer gespeicherten Prozedur mit Parametern mit der folgenden Syntax:
- PROZEDUR ERSTELLEN dbo.uspGetAddress @City nvarchar(30) AS
- Siehe die details und Beispiele unten
SQL Server-Abfrage in eine Gespeicherte Prozedur
Unten ist die Abfrage, die wir verwenden möchten, um die gespeicherte Prozedur erstellen.
USE AdventureWorksGOSELECT * FROM Person.AddressGO
Die Idee ist, die gespeicherte Prozedur zu erstellen, bei der die Stadt an diestored Prozedur übergeben wird, damit sie dynamische Ergebnisse erstellen kann., Dies kann wie folgt unter Verwendung einer Variablen erfolgen. Wenn wir den folgenden Code ausführen, werden nur die Ergebnisse für NewYork zurückgegeben.
USE AdventureWorksGODECLARE @City nvarchar(30)SET @City = 'New York'SELECT * FROM Person.AddressWHERE City = @CityGO
Wir könnten diesen Ansatz verwenden und die Variable @City weiter aktualisieren, aber es gibt eine bessere Möglichkeit, dies durch Erstellen einer gespeicherten Prozedur zu tun.
SQL Server Stored Procedure mit einem Parameter erstellen
In diesem Beispiel werden wir die Person abfragen.Adresstabelle aus der AdventureWorksdatabase, aber anstatt alle Datensätze zurückzugewinnen, beschränken wir sie auf eine bestimmte Stadt., In diesem Beispiel wird davon ausgegangen, dass der Stadtwert, der übergeben wird, genau übereinstimmt.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30)ASSELECT * FROM Person.AddressWHERE City = @CityGO
Um diese gespeicherte Prozedur aufzurufen, würden wir sie wie folgt ausführen:
EXEC dbo.uspGetAddress @City = 'New York'
Löschen der gespeicherten Prozedur
Wenn Sie die gespeicherte Prozedur erstellt haben und die storedprocedure mit demselben Namen neu erstellen möchten, können Sie sie mit folgendem löschenbefore versuchen, sie erneut zu erstellen.
USE AdventureWorksGODROP PROCEDURE dbo.uspGetAddressGO
Wenn Sie versuchen, die gespeicherte Prozedur zu erstellen und sie bereits vorhanden ist, erhalten Sie eine Fehlermeldung.,
Es ist bereits ein Objekt mit dem Namen ‚uspGetAddress‘ in der Datenbank.
SQL Server Stored Procedure with Parameter using Wildcard
Wir können auch dasselbe tun, aber den Benutzern erlauben, uns einen Startpunkt zu gebenum die Daten zu durchsuchen.
Hier können wir das „=“ in ein LIKE ändern und den Platzhalter „%“ verwenden.
Dies kann wie folgt ausgeführt werden, um alle Städte zu finden, die mit Neu beginnen.,
EXEC dbo.uspGetAddress @City = 'New'
SQL Server Stored Procedure Error When Parameter Not Passed
In beiden Beispielen wird davon ausgegangen, dass immer ein Parameterwert übergeben wird. Wenn Sie versuchen, die Prozedur auszuführen, ohne dabei Parameterwert erhalten Sie eine Fehlermeldung wie die folgende:
EXEC dbo.uspGetAddress
Prozedur oder Funktion ‚uspGetAddress‘ erwartet parameter ‚@City“, whichwas nicht geliefert.,
SQL Server-Gespeicherte Prozedur mit NULL als Default-Parameter
In den meisten Fällen ist es immer eine gute Praxis zu übergeben, in der alle parameter Werte,aber manchmal ist es nicht möglich. In diesem Beispiel verwenden wir die Option NULL, damit Sie keinen Parameterwert übergeben können. Wenn wir diese storedprocedure so erstellen und ausführen, wie sie ist, werden keine Daten zurückgegeben, da nach Cityvalues gesucht wird, die gleich NULL sind.
USE AdventureWorksGOCREATE PROCEDURE dbo.uspGetAddress @City nvarchar(30) = NULLASSELECT *FROM Person.AddressWHERE City = @CityGO
Wenn wir Folgendes ausführen, funktioniert es, es werden jedoch keine Daten zurückgegeben.,
EXEC dbo.uspGetAddress
Wir könnten diese gespeicherte Prozedur ändern und die ISNULL-Funktion verwenden, um dies zu umgehen. Wenn also ein Wert übergeben wird, wird der Wert verwendet, um das Resultset einzugrenzen, und wenn ein Wert nicht übergeben wird, werden alle Datensätze zurückgegeben. (Hinweis: Wenn die Spalte „Stadt“ Nullwerte enthält, enthält dies diese Werte nicht. Sie haveto zusätzliche Logik für die Stadt IST NULL)
wenn wir Nun führen Sie den nachstehenden Befehl, werden alle Daten zurückgegeben, die von der Tabelle.,
EXEC dbo.uspGetAddress
Erstellen Sie eine gespeicherte SQL Server-Prozedur mit mehreren Parametern
Das Einrichten mehrerer Parameter ist sehr einfach. Sie müssen nur listeach Parameter und den Datentyp durch ein Komma getrennt, wie unten gezeigt.
Um dies auszuführen, können Sie Folgendes tun:
Letzte Aktualisierung: 4/3/2020