it-swarm.com.de

Was ist eine gespeicherte Prozedur?

Was ist eine gespeicherte Prozedur? Wie arbeiten Sie? Woraus besteht eine gespeicherte Prozedur (Dinge, die jede muss muss eine gespeicherte Prozedur sein)?

264
George Stocker

Gespeicherte Prozeduren sind ein Stapel von SQL-Anweisungen, die auf verschiedene Arten ausgeführt werden können. Die meisten großen DBMs unterstützen gespeicherte Prozeduren. jedoch nicht alle. Sie müssen dies mit Ihrer speziellen DBMS-Hilfedokumentation auf Einzelheiten überprüfen. Da mir SQL Server am besten vertraut ist, 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

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

Gespeicherte Prozeduren haben jedoch auch Nachteile, im Wesentlichen die Wartung, die mit Ihrer grundlegenden CRUD - Operation verbunden ist. Angenommen, für jede Tabelle gibt es ein Einfügen, Aktualisieren, Löschen und mindestens eine Auswahl anhand des Primärschlüssels. 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 Sie wahrscheinlich tun werden.

Die Verwendung eines ORM oder einer anderen Methode zum automatischen Generieren der grundlegenden CRUD-Vorgänge hat eine Menge Wert. 

215
JoshBerke

Eine gespeicherte Prozedur ist eine Gruppe vorkompilierter SQL-Anweisungen, die zum Ausführen einer speziellen Aufgabe verwendet werden.

Beispiel: Wenn ich eine Employee-Tabelle habe

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

Zuerst rufe ich die Employee-Tabelle ab:

Create Procedure Employee details
As
Begin
    Select * from Employee
End

So führen Sie die Prozedur in 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 Employee Table 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 in 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 Tabelle Employee muss die Größe der Spalte Namevarchar(30) sein.

137
sidhewsar

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

Beispiel für das Erstellen einer gespeicherten Prozedur

CREATE PROCEDURE test_display
AS
    SELECT FirstName, LastName
    FROM tb_test;

EXEC test_display;

Vorteile der Verwendung von gespeicherten Prozeduren

  • Eine gespeicherte Prozedur ermöglicht eine modulare Programmierung.

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

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

    Wenn für den Vorgang eine große Menge SQL-Code erforderlich ist, der wiederholt ausgeführt wird, können gespeicherte Prozeduren schneller sein. Sie werden analysiert und optimiert, wenn sie zum ersten Mal ausgeführt werden. 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 analysiert und optimiert werden muss, was zu deutlich kürzeren Ausführungszeiten führt.

  • Eine gespeicherte Prozedur kann den Netzwerkverkehr reduzieren.

    Eine Operation, die Hunderte von Zeilen Transact-SQL-Code erfordert, kann durch eine einzige 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 keine Berechtigung zum direkten Ausführen der Anweisungen der Prozedur haben.

    In SQL Server gibt es verschiedene Arten von gespeicherten Prozeduren:

    • Gespeicherte Systemprozeduren
    • Benutzerdefinierte gespeicherte Prozeduren
    • Erweiterte gespeicherte Prozeduren
  • System - gespeicherte Prozeduren werden in der Master-Datenbank gespeichert und beginnen mit einem sp_-Präfix. Mit diesen Verfahren können verschiedene Aufgaben zur Unterstützung von SQL Server-Funktionen für externe Anwendungsaufrufe in den Systemtabellen ausgeführt werden

    Beispiel: sp_helptext [StoredProcedure_Name]

  • Benutzerdefinierte gespeicherte Prozeduren werden normalerweise in einer Benutzerdatenbank gespeichert und sind normalerweise dafür ausgelegt, die Aufgaben in der Benutzerdatenbank auszuführen. Während der Codierung dieser Prozeduren verwenden Sie nicht das sp_-Präfix, denn wenn Sie zuerst das sp_-Präfix verwenden, wird die Master-Datenbank geprüft, und dann wird die benutzerdefinierte Datenbank angezeigt.

  • Extended gespeicherte Prozeduren sind die Prozeduren, die Funktionen aus DLL - Dateien aufrufen. Heutzutage werden erweiterte gespeicherte Prozeduren nicht mehr verwendet, da es besser ist, die Verwendung von erweiterten gespeicherten Prozeduren zu vermeiden.

71
Kanwar Singh

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 auf 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. 

33
Dave Swersky

Denken Sie an eine Situation wie diese,

  • Sie haben eine Datenbank mit Daten.
  • Für den Zugriff auf diese zentrale Datenbank sind eine Reihe verschiedener Anwendungen erforderlich. In Zukunft werden auch einige neue Anwendungen erstellt.
  • Wenn Sie die Inline-Datenbankabfragen einfügen, um auf die zentrale Datenbank in den Code der einzelnen Anwendungen zuzugreifen, müssen Sie dieselbe Abfrage wahrscheinlich immer und immer wieder mit dem Code anderer Anwendungen duplizieren.
  • In dieser Situation können Sie gespeicherte Prozeduren (SPs) verwenden. Mit gespeicherten Prozeduren schreiben Sie eine Anzahl allgemeiner Abfragen (Prozeduren) und speichern diese in der zentralen Datenbank. 
  • Nun wird die Duplizierung der Arbeit nie mehr wie zuvor geschehen und der Datenzugriff und die Wartung werden zentral durchgeführt.

HINWEIS:

  • In der obigen Situation fragen Sie sich vielleicht: "Warum können wir keinen zentralen Datenzugriffsserver einführen, der mit allen Anwendungen interagiert? 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 erhöhen SPs den Datenbankserver noch mehr. Wenn dies je nach Situation ein Problem darstellt, ist ein zentraler Datenzugriffsserver mit Inline-Abfragen die bessere Wahl.
14

Eine gespeicherte Prozedur wird hauptsächlich zum Ausführen bestimmter Aufgaben in einer Datenbank verwendet. Zum Beispiel

  • Holen Sie sich Datenbank-Ergebnissätze aus einer Geschäftslogik für Daten. 
  • Führen Sie mehrere Datenbankoperationen in einem einzigen Aufruf aus.
  • Wird zum Migrieren von Daten von einer Tabelle in eine andere Tabelle verwendet.
  • Kann für andere Programmiersprachen wie Java aufgerufen werden.
7
MAA

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 ganzen SQL-Befehl schreiben, wenn Sie Daten in eine SQL-Datenbank einfügen, aktualisieren oder löschen möchten.

5
venkat

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 anrufen
  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 ändern:

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

Eine gespeicherte Prozedur löschen oder löschen:

DROP PROCEDURE GetEmployee
5
user5723819
  • Eine gespeicherte Prozedur ist eine vorkompilierte Menge von einer oder mehreren SQL-Anweisungen, die bestimmte Aufgaben ausführen.

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

  • Eine gespeicherte Prozedur kann mehrere Parameter zurückgeben

  • Eine gespeicherte Prozedur kann zur Implementierung von Transact verwendet werden

3
Kedarnath M S

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

Syntaxreferenz

 enter image description here

; number nach dies

Eine optionale Ganzzahl, die zum Gruppieren von Prozeduren mit demselben Namen verwendet wird. Diese gruppierten Prozeduren können zusammen mit einer DROP PROCEDURE-Anweisung gelöscht 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

Benutzen 

exec FirstTest 10
exec FirstTest;2 20,30

Ergebnis

 enter image description here

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 [Stapelanfang Zeile 3] Die Prozedur 'SecondTest' kann nicht mit einer Gruppennummer von 2 erstellt werden, da derzeit keine Prozedur mit demselben Namen und einer Gruppennummer von 1 in der Datenbank vorhanden ist . Muss CREATE PROCEDURE 'SecondTest' ausführen, zuerst 1.

Verweise:

  1. CREATE PROCEDURE mit der Syntax für number
  2. Nummerierte gespeicherte Prozeduren in SQL Server - techie-friendly.blogspot.com
  3. Gespeicherte Prozeduren gruppieren - 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. 
2
Lijo

für einfach,

Gespeicherte Prozedur sind Gespeicherte Programme , Ein in der Datenbank gespeichertes Programm/Funktion.

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

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

In einem DBMS ist eine gespeicherte Prozedur ein Satz von SQL-Anweisungen mit einem zugewiesenen Namen, der in kompilierter Form in der Datenbank gespeichert wird, sodass er von mehreren Programmen gemeinsam genutzt werden kann.

Die Verwendung einer gespeicherten Prozedur kann hilfreich sein 

  1. Kontrollierten Zugriff auf Daten ermöglichen (Endbenutzer können nur Daten eingeben oder ändern, aber keine Prozeduren schreiben)

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

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

0
Naina

Gespeicherte Prozeduren in SQL Server können Eingabeparameter akzeptieren und mehrere Werte von Ausgabeparametern zurückgeben. In SQL Server Programmanweisungen für gespeicherte Prozeduren, um Vorgänge in der Datenbank auszuführen und einen Statuswert an eine aufrufende Prozedur oder einen aufrufbaren 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 einer gespeicherten Prozedur, die einen Parameter übernimmt, eine Abfrage ausführt und ein Ergebnis zurückgibt. Insbesondere akzeptiert die gespeicherte Prozedur die BusinessEntityID als Parameter und verwendet diese, um den Primärschlüssel der HumanResources.Employee-Tabelle abzugleichen, um 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 [email protected]     <<<---parameter used as criteria
end

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

0
Jammy Nemo

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

  • Wenn Sie in Ihrem Antrag ein Drittanbieterprogramm für die Verarbeitung von Zahlungen verwenden, sollte die Datenbank hier nur die erforderlichen Informationen und Aktivitäten bereitstellen, über die dieser Dritte autorisiert wurde. Dadurch können Daten ermittelt werden Vertraulichkeit durch Festlegen von Berechtigungen mithilfe von gespeicherten Prozeduren.
  • Die Aktualisierung der Tabelle sollte nur für die Tabelle erfolgen, auf die sie ausgerichtet ist .__, jedoch keine andere Tabelle, durch die wir Datenintegrität mithilfe der Transaktionsverarbeitung und der Fehlerbehandlung erreichen können.
  • Wenn Sie ein oder mehrere Elemente mit einem Datentyp zurückgeben möchten, verwenden Sie Besser einen Ausgabeparameter.
  • In gespeicherten Prozeduren verwenden wir einen Ausgabeparameter für alles, was Zurückgegeben werden muss. Wenn Sie nur ein Element mit dem Datentyp onlyan Integer 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 anzuzeigen.
0

Gespeicherte Prozedur hilft Ihnen, Code auf dem Server zu erstellen. Sie können Parameter übergeben und Ausgaben finden.

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

Eine gespeicherte Prozedur ist eine benannte Sammlung von SQL-Anweisungen und Verfahrenslogik, d. H. Kompiliert, verifiziert und in der Server-Datenbank gespeichert. Eine gespeicherte Prozedur wird normalerweise wie andere Datenbankobjekte behandelt und durch den Serversicherheitsmechanismus gesteuert.

0
Nirmala Hansdak