Microsoft SQL Server oferă mecanismul procedurii stocate pentru a simplifica procesul de dezvoltare a bazei de date prin gruparea instrucțiunilor Transact-SQL în blocuri administrabile. Procedurile stocate sunt apreciate de majoritatea dezvoltatorilor de servere SQL care descoperă că beneficiile de eficiență și securitate pe care le culeagă merită investiția în timp util.
Beneficiile utilizării procedurilor stocate
De ce ar trebui un dezvoltator să folosească procedurile stocate?
Iată avantajele cheie ale acestei tehnologii:
- Execuția precompilată: SQL Server compilează fiecare procedură stocată o dată și apoi reutilizează planul de execuție. Acest lucru are ca rezultat creșterea performanțelor extraordinare când procedurile stocate sunt numite în mod repetat.
- Trafic client / server redus: Dacă lățimea de bandă a rețelei este o preocupare în mediul dvs., veți fi bucuroși să afli că procedurile stocate pot reduce interogările SQL lungi la o singură linie care este transmisă prin cablu.
- Reutilizarea eficientă a abstractizării de cod și de programare: Procedurile stocate pot fi utilizate de mai mulți utilizatori și de programele client. Dacă le folosiți într-un mod planificat, veți găsi că ciclul de dezvoltare durează mai puțin.
- Comenzi de securitate îmbunătățite: Puteți acorda utilizatorilor permisiunea de a executa o procedură stocată independent de permisiunile de bază ale tabelei.
Procedurile stocate sunt similare cu funcțiile definite de utilizator, dar există diferențe subtile.
Structura
Procedurile stocate sunt similare cu construcțiile văzute în alte limbi de programare.
Ele acceptă date sub formă de parametri de intrare specificați la timpul de execuție. Acești parametri de intrare (dacă sunt implementați) sunt utilizați în execuția unei serii de instrucțiuni care produc un rezultat. Acest rezultat este returnat mediului de apel prin utilizarea unei seturi de înregistrări, a parametrilor de ieșire și a unui cod de returnare.
Acest lucru poate părea o gură, dar veți descoperi că procedurile stocate sunt de fapt destul de simple.
Exemplu
Să aruncăm o privire la un exemplu practic referitor la tabelul numit inventar afișat în partea de jos a acestei pagini. Aceste informații sunt actualizate în timp real, iar administratorii depozitului verifică în mod constant nivelurile produselor stocate în depozitul lor și sunt disponibile pentru expediere. În trecut, fiecare manager va rula întrebări similare cu următoarele:
SELECT Produs, CantitateDin inventarWHERE Depozit = 'FL'
Acest lucru a dus la o performanță ineficientă la SQL Server. De fiecare dată când un manager de depozit a executat interogarea, serverul de bază de date a fost forțat să recompileze interogarea și să o execute de la zero. De asemenea, este necesar ca managerul depozitului să aibă cunoștințe despre SQL și permisiuni corespunzătoare pentru a accesa informațiile din tabel.În schimb, procesul poate fi simplificat prin utilizarea unei proceduri stocate. Iată codul pentru o procedură numită sp_GetInventory care preia nivelurile de inventar pentru un depozit dat. Managerul depozitului din Florida poate accesa nivelurile de inventar prin emiterea comenzii: Managerul de depozit din New York poate folosi aceeași procedură stocată pentru a accesa inventarul din zona respectivă: Acordat, acesta este un exemplu simplu, dar beneficiile abstractizării pot fi văzute aici. Managerul depozitului nu are nevoie să înțeleagă SQL sau funcționarea interioară a procedurii. Din perspectiva performanței, procedura memorată funcționează minunat. SQL Server creează un plan de execuție o dată și apoi îl re-utilizează prin conectarea parametrilor corespunzători la timpul de execuție.Acum, că ați învățat beneficiile procedurilor stocate, ieșiți acolo și folosiți-le. Încercați câteva exemple și măsurați îmbunătățirile de performanță obținute - veți fi uimiți! Tabelul de inventarCREATE PROCEDURE sp_GetInventory@location varchar (10)LA FEL DESELECT Produs, CantitateDin inventarWHERE Warehouse = @ locație
EXECUTE sp_GetInventory 'FL'
EXECUTE sp_GetInventory 'NY'
ID-ul Produs Depozit Cantitate 142 Fasole verde NY 100 214 mazăre FL 200 825 Porumb NY 140 512 fasole Lima NY 180 491 roșii FL 80 379 Pepene FL 85