Microsoft SQL Server bietet den Mechanismus für gespeicherte Prozeduren, um den Datenbankentwicklungsprozess zu vereinfachen, indem Transact-SQL-Anweisungen in verwaltbaren Blöcken zusammengefasst werden. Gespeicherte Prozeduren werden von den meisten SQL Server-Entwicklern geschätzt, die der Meinung sind, dass die Effizienz- und Sicherheitsvorteile, die sie erzielen, die Investition im Vorfeld wert sind.
Vorteile der Verwendung von gespeicherten Prozeduren
Warum sollte ein Entwickler gespeicherte Prozeduren verwenden?
Hier sind die wichtigsten Vorteile dieser Technologie:
- Vorkompilierte Ausführung: SQL Server kompiliert jede gespeicherte Prozedur einmal und verwendet dann den Ausführungsplan erneut. Dies führt zu einer enormen Leistungssteigerung, wenn gespeicherte Prozeduren wiederholt aufgerufen werden.
- Reduzierter Client / Server-Verkehr: Wenn die Netzwerkbandbreite in Ihrer Umgebung von Belang ist, werden Sie erfreut sein, dass gespeicherte Prozeduren lange SQL-Abfragen auf eine einzige Leitung reduzieren können, die über die Leitung übertragen wird.
- Effiziente Wiederverwendung von Code und Programmierabstraktion: Gespeicherte Prozeduren können von mehreren Benutzern und Clientprogrammen verwendet werden. Wenn Sie sie auf eine geplante Art und Weise verwenden, werden Sie feststellen, dass der Entwicklungszyklus weniger Zeit in Anspruch nimmt.
- Erweiterte Sicherheitskontrollen: Sie können Benutzern die Berechtigung erteilen, eine gespeicherte Prozedur unabhängig von den zugrunde liegenden Tabellenberechtigungen auszuführen.
Gespeicherte Prozeduren ähneln benutzerdefinierten Funktionen, es gibt jedoch geringfügige Unterschiede.
Struktur
Gespeicherte Prozeduren ähneln den Konstrukten anderer Programmiersprachen.
Sie akzeptieren Daten in Form von Eingabeparametern, die zur Ausführungszeit angegeben werden. Diese Eingabeparameter (falls implementiert) werden bei der Ausführung einer Reihe von Anweisungen verwendet, die zu einem Ergebnis führen. Dieses Ergebnis wird mithilfe eines Recordset, von Ausgabeparametern und einem Rückkehrcode an die aufrufende Umgebung zurückgegeben.
Das klingt nach einem Bissen, aber gespeicherte Prozeduren sind ziemlich einfach.
Beispiel
Schauen wir uns ein praktisches Beispiel an, das sich auf die Tabelle mit dem Namen "inventory" bezieht, die unten auf dieser Seite angezeigt wird. Diese Informationen werden in Echtzeit aktualisiert, und Lagerverwalter prüfen ständig die Produktniveaus, die in ihrem Lager gelagert werden und für den Versand verfügbar sind. In der Vergangenheit führte jeder Manager Abfragen ähnlich den folgenden aus:
SELECT Produkt, MengeFROM InventarWHERE Warehouse = 'FL'
Dies führte zu einer ineffizienten Leistung auf dem SQL Server. Jedes Mal, wenn ein Warehouse-Manager die Abfrage ausführte, musste der Datenbankserver die Abfrage erneut kompilieren und von Grund auf ausführen. Außerdem musste der Warehouse-Manager SQL-Kenntnisse und entsprechende Zugriffsrechte für den Zugriff auf die Tabelleninformationen besitzen.Stattdessen kann der Prozess durch die Verwendung einer gespeicherten Prozedur vereinfacht werden. Hier ist der Code für eine Prozedur namens sp_GetInventory, die die Lagerbestände für ein bestimmtes Warehouse abruft. Der Lagerverwalter in Florida kann dann auf den Lagerbestand zugreifen, indem er den folgenden Befehl ausgibt: Der Lagerverwalter von New York kann dieselbe gespeicherte Prozedur verwenden, um auf das Inventar dieses Bereichs zuzugreifen: Zugegeben, dies ist ein einfaches Beispiel, aber die Vorteile der Abstraktion können hier gesehen werden. Der Warehouse-Manager muss SQL oder die inneren Abläufe der Prozedur nicht verstehen. Aus Performance-Sicht wirkt die gespeicherte Prozedur Wunder. Der SQL Server erstellt einmalig einen Ausführungsplan und verwendet ihn anschließend erneut, indem er zur Ausführungszeit die entsprechenden Parameter einfügt.Nachdem Sie nun die Vorteile von gespeicherten Prozeduren kennen gelernt haben, sollten Sie sich auf den Weg machen und sie verwenden. Probieren Sie einige Beispiele aus und messen Sie die erzielten Leistungssteigerungen - Sie werden begeistert sein! InventartabelleCREATE PROCEDURE sp_GetInventory@location varchar (10)WIESELECT Produkt, MengeFROM InventarWHERE Warehouse = @Location
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
ICH WÜRDE Produkt Warenhaus Menge 142 Grüne Bohnen NY 100 214 Erbsen FL 200 825 Mais NY 140 512 Limabohnen NY 180 491 Tomaten FL 80 379 Wassermelone FL 85