Antworten:
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.
Eine gespeicherte Prozedur besteht aus einer Reihe vorkompilierter SQL-Anweisungen, mit denen eine spezielle Aufgabe ausgeführt wird.
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 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 Employee
Tabelle muss die Name
Spaltengröße sein varchar(30)
.
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 -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.
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.
Denken Sie an eine Situation wie diese,
HINWEIS:
Eine gespeicherte Prozedur wird hauptsächlich verwendet, um bestimmte Aufgaben in einer Datenbank auszuführen. Beispielsweise
Eine gespeicherte Prozedur ist nichts anderes als eine Gruppe von SQL-Anweisungen, die in einem einzigen Ausführungsplan zusammengefasst sind.
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
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
"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 procedures
oder numbering stored procedures
.
Syntaxreferenz
; number
wie 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
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 :
VORSICHT
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.
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
Bereitstellung eines kontrollierten Zugriffs auf Daten (Endbenutzer können nur Daten eingeben oder ändern, aber keine Prozeduren schreiben)
Gewährleistung der Datenintegrität (Daten würden auf konsistente Weise eingegeben) und
Verbessert die Produktivität (die Anweisungen einer gespeicherten Prozedur müssen nur einmal geschrieben werden)
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;
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.
In gespeicherten Prozeduren werden Anweisungen nur einmal geschrieben und reduzieren den Netzwerkverkehr zwischen Clients und Servern. Wir können auch SQL Injection Attacks vermeiden.
ORM
wieEntity Framework
zu tunCRUD
Operationen?