Risposte:
Le stored procedure sono un batch di istruzioni SQL che possono essere eseguite in un paio di modi. La maggior parte dei principali DBM supporta procedure memorizzate; tuttavia, non tutti lo fanno. Sarà necessario verificare con la documentazione di aiuto DBMS particolare per specifiche. Come ho più familiarità con SQL Server lo userò come i miei campioni.
Per creare una procedura memorizzata la sintassi è abbastanza semplice:
CREATE PROCEDURE <owner>.<procedure name>
<Param> <datatype>
AS
<Body>
Quindi per esempio:
CREATE PROCEDURE Users_GetUserInfo
@login nvarchar(30)=null
AS
SELECT * from [Users]
WHERE ISNULL(@login,login)=login
Un vantaggio delle procedure memorizzate è che è possibile centralizzare la logica di accesso ai dati in un unico posto che è quindi facile da ottimizzare per i DBA. Le procedure memorizzate hanno anche un vantaggio in termini di sicurezza in quanto è possibile concedere diritti di esecuzione a una procedura memorizzata, ma l'utente non dovrà disporre delle autorizzazioni di lettura / scrittura sulle tabelle sottostanti. Questo è un buon primo passo contro l'iniezione SQL.
Le procedure memorizzate presentano degli svantaggi, fondamentalmente la manutenzione associata all'operazione CRUD di base . Diciamo per ogni tabella che hai un Inserisci, Aggiorna, Elimina e almeno una selezione basata sulla chiave primaria, ciò significa che ogni tabella avrà 4 procedure. Ora prendi un database di dimensioni decenti di 400 tabelle e hai 1600 procedure! E questo presuppone che non hai duplicati che probabilmente avrai.
È qui che l'utilizzo di un ORM o di un altro metodo per generare automaticamente le operazioni CRUD di base ha un sacco di meriti.
Una procedura memorizzata è un insieme di istruzioni SQL precompilate utilizzate per eseguire un'attività speciale.
Esempio: se ho un Employee
tavolo
Employee ID Name Age Mobile
---------------------------------------
001 Sidheswar 25 9938885469
002 Pritish 32 9178542436
Per prima cosa sto recuperando la Employee
tabella:
Create Procedure Employee details
As
Begin
Select * from Employee
End
Per eseguire la procedura su SQL Server:
Execute Employee details
--- (Employee details is a user defined name, give a name as you want)
Quindi, in secondo luogo, sto inserendo il valore nella tabella Employee
Create Procedure employee_insert
(@EmployeeID int, @Name Varchar(30), @Age int, @Mobile int)
As
Begin
Insert Into Employee
Values (@EmployeeID, @Name, @Age, @Mobile)
End
Per eseguire la procedura parametrizzata su SQL Server:
Execute employee_insert 003,’xyz’,27,1234567890
--(Parameter size must be same as declared column size)
Esempio: @Name Varchar(30)
Nella Employee
tabella le Name
dimensioni della colonna devono essere varchar(30)
.
Una procedura memorizzata è un gruppo di istruzioni SQL create e archiviate nel database. Una procedura memorizzata accetterà i parametri di input in modo che una singola procedura possa essere utilizzata sulla rete da più client utilizzando dati di input diversi. Una stored procedure ridurrà il traffico di rete e aumenterà le prestazioni. Se modifichiamo una procedura memorizzata, tutti i client otterranno la procedura memorizzata aggiornata.
Esempio di creazione di una procedura memorizzata
CREATE PROCEDURE test_display
AS
SELECT FirstName, LastName
FROM tb_test;
EXEC test_display;
Vantaggi dell'utilizzo di stored procedure
Una procedura memorizzata consente la programmazione modulare.
È possibile creare una volta la procedura, archiviarla nel database e chiamarla un numero qualsiasi di volte nel programma.
Una procedura memorizzata consente un'esecuzione più rapida.
Se l'operazione richiede una grande quantità di codice SQL che viene eseguita ripetutamente, le procedure memorizzate possono essere più veloci. Vengono analizzati e ottimizzati quando vengono eseguiti per la prima volta e una versione compilata della procedura memorizzata rimane in una cache di memoria per un uso successivo. Ciò significa che la procedura memorizzata non deve essere ripetuta e ottimizzata con ogni utilizzo, con conseguenti tempi di esecuzione molto più rapidi.
Una procedura memorizzata può ridurre il traffico di rete.
Un'operazione che richiede centinaia di righe di codice Transact-SQL può essere eseguita tramite una singola istruzione che esegue il codice in una procedura, anziché inviando centinaia di righe di codice sulla rete.
Le procedure memorizzate forniscono una migliore sicurezza per i tuoi dati
Agli utenti può essere concessa l'autorizzazione per eseguire una procedura memorizzata anche se non dispongono dell'autorizzazione per eseguire direttamente le istruzioni della procedura.
In SQL Server abbiamo diversi tipi di procedure memorizzate:
Le procedure memorizzate nel sistema sono archiviate nel database principale e iniziano con un sp_
prefisso. Queste procedure possono essere utilizzate per eseguire una varietà di attività per supportare le funzioni di SQL Server per le chiamate esterne dell'applicazione nelle tabelle di sistema
Esempio: sp_helptext [StoredProcedure_Name]
Le procedure memorizzate definite dall'utente vengono generalmente archiviate in un database utente e sono progettate in genere per completare le attività nel database utente. Durante la codifica di queste procedure non si utilizza il sp_
prefisso perché se si utilizza sp_
prima il prefisso, controllerà il database principale, quindi verrà fornito al database definito dall'utente.
Le stored procedure estese sono le procedure che richiamano funzioni dai file DLL. Al giorno d'oggi, le stored procedure estese sono deprecate per il motivo per cui sarebbe meglio evitare l'utilizzo di stored procedure estese.
Generalmente, una procedura memorizzata è una "Funzione SQL". Loro hanno:
-- 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
Questo è un esempio focalizzato su T-SQL. Le procedure memorizzate possono eseguire la maggior parte delle istruzioni SQL, restituire valori scalari e basati su tabella e sono considerate più sicure perché impediscono gli attacchi di iniezione SQL.
Pensa a una situazione come questa,
NOTA:
Una procedura memorizzata viene utilizzata principalmente per eseguire determinate attività su un database. Per esempio
Una procedura memorizzata non è altro che un gruppo di istruzioni SQL compilate in un unico piano di esecuzione.
Esempio: creazione di una procedura memorizzata
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
Modificare o modificare una procedura memorizzata:
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
Rilascia o elimina una procedura memorizzata:
DROP PROCEDURE GetEmployee
Una procedura memorizzata è un set precompilato di una o più istruzioni SQL che eseguono alcune attività specifiche.
Una procedura memorizzata deve essere eseguita autonomamente utilizzando EXEC
Una procedura memorizzata può restituire più parametri
Una procedura memorizzata può essere utilizzata per implementare transact
"Che cos'è una stored procedure" ha già ricevuto risposta in altri post qui. Quello che posterò è un modo meno noto di usare la stored procedure. È grouping stored procedures
o numbering stored procedures
.
Sintassi di riferimento
; number
secondo questo
Un numero intero facoltativo utilizzato per raggruppare le procedure con lo stesso nome. Queste procedure raggruppate possono essere eliminate insieme usando un'istruzione DROP PROCEDURE
Esempio
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
Uso
exec FirstTest 10
exec FirstTest;2 20,30
Risultato
Un altro tentativo
CREATE Procedure SecondTest;2
(
@InputA INT,
@InputB INT
)
AS
BEGIN
SELECT 'A' + CONVERT(VARCHAR(10),@InputA)+ CONVERT(VARCHAR(10),@InputB)
END
GO
Risultato
Messaggio 2730, livello 11, stato 1, procedura SecondTest, riga 1 [Batch Start Line 3] Impossibile creare la procedura "SecondTest" con un numero di gruppo di 2 perché al momento non esiste una procedura con lo stesso nome e un numero di gruppo di 1 il database. È necessario eseguire CREATE PROCEDURE 'SecondTest'; 1 prima.
Riferimenti :
ATTENZIONE
Una procedura memorizzata è una raccolta denominata di istruzioni SQL e logica procedurale, ovvero compilata, verificata e archiviata nel database del server. Una procedura memorizzata viene in genere trattata come altri oggetti di database e controllata tramite il meccanismo di sicurezza del server.
In un DBMS, una procedura memorizzata è un insieme di istruzioni SQL con un nome assegnato che è memorizzato nel database in forma compilata in modo che possa essere condiviso da un numero di programmi.
L'uso di una procedura memorizzata può essere utile in
Fornire un accesso controllato ai dati (gli utenti finali possono solo inserire o modificare i dati, ma non possono scrivere procedure)
Garantire l'integrità dei dati (i dati verrebbero inseriti in modo coerente) e
Migliora la produttività (le dichiarazioni di una procedura memorizzata devono essere scritte una sola volta)
per semplice,
Stored procedure sono programmi memorizzati , un programma / funzione memorizzato nel database.
Ogni programma memorizzato contiene un corpo costituito da un'istruzione SQL. Questa istruzione può essere un'istruzione composta composta da più istruzioni separate da punti e virgola (;).
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
Le stored procedure in SQL Server possono accettare parametri di input e restituire più valori di parametri di output; in SQL Server, le stored procedure programmano le istruzioni per eseguire operazioni nel database e restituire un valore di stato a una procedura o batch chiamante.
I vantaggi dell'utilizzo di stored procedure in SQL Server
Consentono la programmazione modulare. Consentono un'esecuzione più rapida. Possono ridurre il traffico di rete. Possono essere usati come meccanismo di sicurezza.
Ecco un esempio di una procedura memorizzata che accetta un parametro, esegue una query e restituisce un risultato. In particolare, la procedura memorizzata accetta BusinessEntityID come parametro e lo utilizza per abbinare la chiave primaria della tabella HumanResources.Employee per restituire il dipendente richiesto.
> 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
L'ho imparato da essential.com ... è molto utile.
Nelle procedure memorizzate le dichiarazioni sono scritte una sola volta e riducono il traffico di rete tra client e server. Possiamo anche evitare attacchi di iniezione di SQL.
ORM
piaceEntity Framework
fareCRUD
operazioni?