Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist eine gespeicherte Prozedur?

Gespeicherte Prozeduren sind eine Reihe von SQL-Anweisungen, die auf verschiedene Arten ausgeführt werden können. Die meisten großen DBMs unterstützen gespeicherte Prozeduren; jedoch nicht alle tun. Einzelheiten müssen Sie mit Ihrer speziellen DBMS-Hilfedokumentation überprüfen. Da ich mit SQL Server am besten vertraut bin, werde ich dies als meine Beispiele verwenden.

Um eine gespeicherte Prozedur zu erstellen, ist die Syntax ziemlich einfach:

CREATE PROCEDURE <owner>.<procedure name>

     <Param> <datatype>

AS

     <Body>

Also zum Beispiel:

CREATE PROCEDURE Users_GetUserInfo

    @login nvarchar(30)=null

AS

    SELECT * from [Users]
    WHERE ISNULL(@login,login)=login

Ein Vorteil gespeicherter Prozeduren besteht darin, dass Sie die Datenzugriffslogik an einem einzigen Ort zentralisieren können, der dann für DBAs einfach zu optimieren ist. Gespeicherte Prozeduren haben auch einen Sicherheitsvorteil, da Sie einer gespeicherten Prozedur Ausführungsrechte erteilen können, der Benutzer jedoch keine Lese-/Schreibberechtigungen für die zugrunde liegenden Tabellen haben muss. Dies ist ein guter erster Schritt gegen die SQL-Injection.

Gespeicherte Prozeduren haben Nachteile, im Grunde die Wartung, die mit Ihrem grundlegenden CRUD-Betrieb verbunden ist. Angenommen, Sie haben für jede Tabelle ein Einfügen, Aktualisieren, Löschen und mindestens eine Auswahl basierend auf dem Primärschlüssel, das bedeutet, dass jede Tabelle 4 Prozeduren hat. Nehmen Sie jetzt eine anständige Datenbank mit 400 Tabellen und Sie haben 1600 Prozeduren! Und das setzt voraus, dass Sie keine Duplikate haben, was wahrscheinlich der Fall sein wird.

Hier hat die Verwendung eines ORM oder einer anderen Methode zur automatischen Generierung Ihrer grundlegenden CRUD-Operationen eine Menge Vorteile.