Was ist eine gespeicherte Prozedur?

298

Was ist eine "gespeicherte Prozedur" und wie funktionieren sie?

Wie setzt sich eine gespeicherte Prozedur zusammen (Dinge müssen jeweils gespeicherte Prozeduren sein)?

M--
quelle

Antworten:

243

Gespeicherte Prozeduren sind ein Stapel von SQL-Anweisungen, die auf verschiedene Arten ausgeführt werden können. Die meisten wichtigen DBMs unterstützen gespeicherte Prozeduren. jedoch nicht alle. Sie müssen anhand Ihrer speziellen DBMS-Hilfedokumentation nach Einzelheiten suchen. Da ich mit SQL Server am besten vertraut bin, werde ich dies als Beispiel 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 Datenbankadministratoren einfach zu optimieren ist. Gespeicherte Prozeduren haben auch den Sicherheitsvorteil, dass Sie einer gespeicherten Prozedur Ausführungsrechte gewähren 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 Ihrer grundlegenden CRUD- Operation 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. Dies bedeutet, dass jede Tabelle über 4 Prozeduren verfügt. Nehmen Sie jetzt eine Datenbank mit einer anständigen Größe von 400 Tabellen und Sie haben 1600 Prozeduren! Und das setzt voraus, dass Sie keine Duplikate haben, die Sie wahrscheinlich haben werden.

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

JoshBerke
quelle
1
Sie meinen gespeicherten Prozedur , Daten zu lesen und ORMwie Entity Frameworkzu tun CRUDOperationen?
Shaijut
2
Ja, das ist ein möglicher Ansatz. Wir verwenden ORMs für alles außer Berichten
JoshBerke
Weitere Informationen zu
Ankur Kumar Singh
150

Eine gespeicherte Prozedur besteht aus einer Reihe vorkompilierter SQL-Anweisungen, mit denen eine spezielle Aufgabe ausgeführt wird.

Beispiel: Wenn ich eine EmployeeTabelle habe

Employee ID  Name       Age  Mobile
---------------------------------------
001          Sidheswar  25   9938885469
002          Pritish    32   9178542436

Zuerst rufe ich die EmployeeTabelle ab:

Create Procedure Employee details
As
Begin
    Select * from Employee
End

So führen Sie die Prozedur unter SQL Server aus:

Execute   Employee details

--- (Employee details is a user defined name, give a name as you want)

Zweitens füge ich den Wert in die Mitarbeitertabelle ein

Create Procedure employee_insert
    (@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
    Insert Into Employee
    Values (@EmployeeID, @Name, @Age, @Mobile)
End

So führen Sie die parametrisierte Prozedur unter SQL Server aus:

Execute employee_insert 003,’xyz’,27,1234567890

  --(Parameter size must be same as declared column size)

Beispiel: @Name Varchar(30)

In der EmployeeTabelle muss die NameSpaltengröße sein varchar(30).

Sidhewsar
quelle
1
Beispiel, das leicht zu verstehen ist
HaFiz Umer
80

Eine gespeicherte Prozedur ist eine Gruppe von SQL-Anweisungen, die erstellt und in der Datenbank gespeichert wurden. Eine gespeicherte Prozedur akzeptiert Eingabeparameter, sodass eine einzelne Prozedur von mehreren Clients mit unterschiedlichen Eingabedaten über das Netzwerk verwendet werden kann. Eine gespeicherte Prozedur reduziert den Netzwerkverkehr und erhöht die Leistung. Wenn wir eine gespeicherte Prozedur ändern, erhalten alle Clients die aktualisierte gespeicherte Prozedur.

Beispiel für die Erstellung einer gespeicherten Prozedur

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

Vorteile der Verwendung gespeicherter Prozeduren

  • Eine gespeicherte Prozedur ermöglicht eine modulare Programmierung.

    Sie können die Prozedur einmal erstellen, in der Datenbank speichern und in Ihrem Programm beliebig oft aufrufen.

  • Eine gespeicherte Prozedur ermöglicht eine schnellere Ausführung.

    Wenn für den Vorgang eine große Menge an SQL-Code erforderlich ist, der wiederholt ausgeführt wird, können gespeicherte Prozeduren schneller sein. Sie werden bei ihrer ersten Ausführung analysiert und optimiert, und eine kompilierte Version der gespeicherten Prozedur verbleibt zur späteren Verwendung in einem Speichercache. Dies bedeutet, dass die gespeicherte Prozedur nicht bei jeder Verwendung erneut repariert und optimiert werden muss, was zu viel schnelleren Ausführungszeiten führt.

  • Eine gespeicherte Prozedur kann den Netzwerkverkehr reduzieren.

    Eine Operation, die Hunderte von Zeilen Transact-SQL-Code erfordert, kann über eine einzelne Anweisung ausgeführt werden, die den Code in einer Prozedur ausführt, anstatt Hunderte von Codezeilen über das Netzwerk zu senden.

  • Gespeicherte Prozeduren bieten eine bessere Sicherheit für Ihre Daten

    Benutzern kann die Berechtigung zum Ausführen einer gespeicherten Prozedur erteilt werden, auch wenn sie nicht über die Berechtigung verfügen, die Anweisungen der Prozedur direkt auszuführen.

    In SQL Server gibt es verschiedene Arten von gespeicherten Prozeduren:

    • System gespeicherte Prozeduren
    • Benutzerdefinierte gespeicherte Prozeduren
    • Erweiterte gespeicherte Prozeduren
  • System -stored Verfahren sind in der Master - Datenbank und diesen Start mit einem gespeicherten sp_Präfix. Mit diesen Verfahren können verschiedene Aufgaben ausgeführt werden, um SQL Server-Funktionen für externe Anwendungsaufrufe in den Systemtabellen zu unterstützen

    Beispiel: sp_helptext [StoredProcedure_Name]

  • Benutzerdefinierte gespeicherte Prozeduren werden normalerweise in einer Benutzerdatenbank gespeichert und dienen normalerweise zum Ausführen der Aufgaben in der Benutzerdatenbank. Während der Codierung dieser Prozeduren wird das Präfix nicht verwendet,sp_ da bei Verwendung des sp_Präfixes zuerst die Master-Datenbank überprüft wird und dann die benutzerdefinierte Datenbank aufgerufen wird.

  • Erweiterte gespeicherte Prozeduren sind Prozeduren, die Funktionen aus DLL-Dateien aufrufen. Heutzutage sind erweiterte gespeicherte Prozeduren veraltet, da es besser ist, die Verwendung erweiterter gespeicherter Prozeduren zu vermeiden.

Kanwar Singh
quelle
37

Im Allgemeinen ist eine gespeicherte Prozedur eine "SQL-Funktion". Sie haben:

-- a name
CREATE PROCEDURE spGetPerson
-- parameters
CREATE PROCEDURE spGetPerson(@PersonID int)
-- a body
CREATE PROCEDURE spGetPerson(@PersonID int)
AS
SELECT FirstName, LastName ....
FROM People
WHERE PersonID = @PersonID

Dies ist ein T-SQL-fokussiertes Beispiel. Gespeicherte Prozeduren können die meisten SQL-Anweisungen ausführen, skalare und tabellenbasierte Werte zurückgeben und gelten als sicherer, da sie SQL-Injection-Angriffe verhindern.

Dave Swersky
quelle
16

Denken Sie an eine Situation wie diese,

  • Sie haben eine Datenbank mit Daten.
  • Für den Zugriff auf diese zentrale Datenbank sind verschiedene Anwendungen erforderlich, in Zukunft auch einige neue Anwendungen.
  • Wenn Sie die Inline-Datenbankabfragen für den Zugriff auf die zentrale Datenbank in den Code jeder Anwendung einzeln einfügen möchten, müssen Sie wahrscheinlich dieselbe Abfrage immer wieder im Code verschiedener Anwendungen duplizieren.
  • In einer solchen Situation können Sie gespeicherte Prozeduren (SPs) verwenden. Bei gespeicherten Prozeduren schreiben Sie eine Reihe allgemeiner Abfragen (Prozeduren) und speichern diese in der zentralen Datenbank.
  • Jetzt wird die Doppelarbeit nie mehr wie zuvor stattfinden und der Datenzugriff und die Wartung werden zentral durchgeführt.

HINWEIS:

  • In der oben genannten Situation fragen Sie sich möglicherweise: "Warum können wir keinen zentralen Datenzugriffsserver für die Interaktion mit allen Anwendungen einführen? Ja. Dies ist eine mögliche Alternative. Aber,
  • Der Hauptvorteil von SPs gegenüber diesem Ansatz besteht darin, dass SPs im Gegensatz zu Ihrem Datenzugriffscode mit Inline-Abfragen vorkompilierte Anweisungen sind, sodass sie schneller ausgeführt werden. Die Kommunikationskosten (über Netzwerke) sind minimal.
  • Im Gegensatz dazu werden SPs dem Datenbankserver etwas mehr Last hinzufügen. Wenn dies je nach Situation ein Problem darstellt, ist ein zentraler Datenzugriffsserver mit Inline-Abfragen die bessere Wahl.
Supun Wijerathne
quelle
9

Eine gespeicherte Prozedur wird hauptsächlich verwendet, um bestimmte Aufgaben in einer Datenbank auszuführen. Beispielsweise

  • Abrufen von Datenbank-Ergebnismengen aus einer Geschäftslogik für Daten.
  • Führen Sie mehrere Datenbankoperationen in einem einzigen Aufruf aus.
  • Wird verwendet, um Daten von einer Tabelle in eine andere Tabelle zu migrieren.
  • Kann für andere Programmiersprachen wie Java aufgerufen werden.
MAA
quelle
7

Eine gespeicherte Prozedur ist nichts anderes als eine Gruppe von SQL-Anweisungen, die in einem einzigen Ausführungsplan zusammengefasst sind.

  1. Einmal erstellen und n-mal aufrufen
  2. Es reduziert den Netzwerkverkehr

Beispiel: Erstellen einer gespeicherten Prozedur

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
      SET NOCOUNT ON;

      SELECT FirstName, LastName, BirthDate, City, Country
      FROM Employees 
      WHERE EmployeeID = @EmployeeID
END
GO

Eine gespeicherte Prozedur ändern oder modifizieren:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE GetEmployee
      @EmployeeID int = 0
AS
BEGIN
    SET NOCOUNT ON;

    SELECT FirstName, LastName, BirthDate, City, Country
    FROM Employees 
    WHERE EmployeeID = @EmployeeID
END
GO

Löschen oder Löschen einer gespeicherten Prozedur:

DROP PROCEDURE GetEmployee
5723819
quelle
6

Eine gespeicherte Prozedur wird verwendet, um Daten abzurufen, Daten zu ändern und Daten in der Datenbanktabelle zu löschen. Sie müssen nicht jedes Mal einen vollständigen SQL-Befehl schreiben, wenn Sie Daten in eine SQL-Datenbank einfügen, aktualisieren oder löschen möchten.

venkat
quelle
4
  • Eine gespeicherte Prozedur ist eine vorkompilierte Gruppe von einer oder mehreren SQL-Anweisungen, die eine bestimmte Aufgabe ausführen.

  • Eine gespeicherte Prozedur sollte eigenständig mit ausgeführt werden EXEC

  • Eine gespeicherte Prozedur kann mehrere Parameter zurückgeben

  • Eine gespeicherte Prozedur kann verwendet werden, um eine Transaktion zu implementieren

Kedarnath MS
quelle
4

"Was ist eine gespeicherte Prozedur?" Wird hier bereits in anderen Beiträgen beantwortet. Was ich posten werde, ist eine weniger bekannte Art, gespeicherte Prozeduren zu verwenden. Es ist grouping stored proceduresoder numbering stored procedures.

Syntaxreferenz

Geben Sie hier die Bildbeschreibung ein

; numberwie dies

Eine optionale Ganzzahl, mit der gleichnamige Prozeduren gruppiert werden. Diese gruppierten Prozeduren können mithilfe einer DROP PROCEDURE-Anweisung zusammengefasst werden

Beispiel

CREATE Procedure FirstTest 
(
    @InputA INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)
END
GO

CREATE Procedure FirstTest;2
(
    @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

Verwenden

exec FirstTest 10
exec FirstTest;2 20,30

Ergebnis

Geben Sie hier die Bildbeschreibung ein

Ein weiterer Versuch

CREATE Procedure SecondTest;2
(
     @InputA INT,
    @InputB INT
)
AS 
BEGIN
    SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO

Ergebnis

Meldung 2730, Ebene 11, Status 1, Prozedur SecondTest, Zeile 1 [Stapelstartzeile 3] Prozedur 'SecondTest' kann nicht mit einer Gruppennummer von 2 erstellt werden, da derzeit keine Prozedur mit demselben Namen und einer Gruppennummer von 1 vorhanden ist die Datenbank. Muss CREATE PROCEDURE 'SecondTest' ausführen; 1 zuerst.

Referenzen :

  1. CREATE PROCEDURE mit der Syntax für number
  2. Nummerierte gespeicherte Prozeduren in SQL Server - techie-friendly.blogspot.com
  3. Gruppieren gespeicherter Prozeduren - sqlmag

VORSICHT

  1. Nachdem Sie die Prozeduren gruppiert haben, können Sie sie nicht einzeln löschen.
  2. Diese Funktion wird möglicherweise in einer zukünftigen Version von Microsoft SQL Server entfernt.
Lijo
quelle
0

Eine gespeicherte Prozedur ist eine benannte Sammlung von SQL-Anweisungen und prozeduraler Logik, dh kompiliert, verifiziert und in der Serverdatenbank gespeichert. Eine gespeicherte Prozedur wird normalerweise wie andere Datenbankobjekte behandelt und über den Serversicherheitsmechanismus gesteuert.

Nirmala Hansdak
quelle
0

In einem DBMS ist eine gespeicherte Prozedur eine Reihe von SQL-Anweisungen mit einem zugewiesenen Namen, die in kompilierter Form in der Datenbank gespeichert sind, damit sie von einer Reihe von Programmen gemeinsam genutzt werden können.

Die Verwendung einer gespeicherten Prozedur kann hilfreich sein

  1. Bereitstellung eines kontrollierten Zugriffs auf Daten (Endbenutzer können nur Daten eingeben oder ändern, aber keine Prozeduren schreiben)

  2. Gewährleistung der Datenintegrität (Daten würden auf konsistente Weise eingegeben) und

  3. Verbessert die Produktivität (die Anweisungen einer gespeicherten Prozedur müssen nur einmal geschrieben werden)

Naina
quelle
0

für einfache,

Gespeicherte Prozeduren sind gespeicherte Programme . Ein Programm / eine Funktion, die in einer Datenbank gespeichert sind.

Jedes gespeicherte Programm enthält einen Text, der aus einer SQL-Anweisung besteht. Diese Anweisung kann eine zusammengesetzte Anweisung sein, die aus mehreren Anweisungen besteht, die durch Semikolon (;) getrennt sind.

CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
  SET @x = 0;
  REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
AZinkey
quelle
0

In SQL Server gespeicherte Prozeduren können Eingabeparameter akzeptieren und mehrere Werte von Ausgabeparametern zurückgeben. In SQL Server programmieren Anweisungen für gespeicherte Prozeduren, um Operationen in der Datenbank auszuführen und einen Statuswert an eine aufrufende Prozedur oder einen Stapel zurückzugeben.

Die Vorteile der Verwendung gespeicherter Prozeduren in SQL Server

Sie ermöglichen eine modulare Programmierung. Sie ermöglichen eine schnellere Ausführung. Sie können den Netzwerkverkehr reduzieren. Sie können als Sicherheitsmechanismus verwendet werden.

Hier ist ein Beispiel für eine gespeicherte Prozedur, die einen Parameter verwendet, eine Abfrage ausführt und ein Ergebnis zurückgibt. Insbesondere akzeptiert die gespeicherte Prozedur die BusinessEntityID als Parameter und verwendet diese, um mit dem Primärschlüssel der Tabelle HumanResources.Employee übereinzustimmen und den angeforderten Mitarbeiter zurückzugeben.

> create procedure HumanResources.uspFindEmployee    `*<<<---Store procedure name`*
@businessEntityID                                     `<<<----parameter`
as
begin
SET NOCOUNT ON;
Select businessEntityId,              <<<----select statement to return one employee row
NationalIdNumber,
LoginID,
JobTitle,
HireData,
From HumanResources.Employee
where businessEntityId =@businessEntityId     <<<---parameter used as criteria
end

Ich habe das von essential.com gelernt ... es ist sehr nützlich.

Jerold Joel
quelle
0

Die gespeicherte Prozedur hilft Ihnen beim Erstellen von Code auf dem Server. Sie können Parameter übergeben und die Ausgabe finden.

create procedure_name (para1 int,para2 decimal)
as
select * from TableName
Biddut
quelle
0

In gespeicherten Prozeduren werden Anweisungen nur einmal geschrieben und reduzieren den Netzwerkverkehr zwischen Clients und Servern. Wir können auch SQL Injection Attacks vermeiden.

  • Wenn Sie in Ihrem Antrag ein Drittanbieterprogramm zur Verarbeitung von Zahlungen verwenden, sollte die Datenbank hier nur die erforderlichen Informationen und Aktivitäten anzeigen, für die dieser Drittanbieter autorisiert wurde. Auf diese Weise können wir die Vertraulichkeit von Daten erreichen, indem wir Berechtigungen mithilfe gespeicherter Prozeduren festlegen.
  • Die Aktualisierung der Tabelle sollte nur für die Tabelle erfolgen, auf die sie abzielt, aber es sollte keine andere Tabelle aktualisiert werden, mit der wir mithilfe der Transaktionsverarbeitung und Fehlerbehandlung Datenintegrität erreichen können.
  • Wenn Sie ein oder mehrere Elemente mit einem Datentyp zurückgeben möchten, ist es besser, einen Ausgabeparameter zu verwenden.
  • In gespeicherten Prozeduren verwenden wir einen Ausgabeparameter für alles, was zurückgegeben werden muss. Wenn Sie nur ein Element mit nur einem ganzzahligen Datentyp zurückgeben möchten, verwenden Sie besser einen Rückgabewert. Tatsächlich dient der Rückgabewert nur dazu, den Erfolg oder Misserfolg der gespeicherten Prozedur zu informieren.
Abhishek Duppati
quelle