internetul Windows. Android

Utilizați proceduri stocate. Care este diferența dintre procedura stocată și reprezentare? Ștergerea procedurii stocate pe instrucțiunea de procedură T-SQL -

Anunțarea procedurii

Creați procedură. [({In | out | inut} [,…])]
[Rezultat dinamic. ]
Începe. [Atomic]

Sfârșit.

Cuvinte cheie
. În parametrul de intrare (intrare)
. OUT (ieșire) - parametru de ieșire
. Inut - intrare și ieșire, precum și câmpul (fără parametri)
. Setul de rezultate dinamic arată că procedura poate deschide numărul specificat de cursori care vor rămâne deschise după revenirea din procedură.

Notează
Nu se recomandă utilizarea multor parametri în procedurile stocate (în principal numere mari și corzi simbolice) datorită supraîncărcării rețelei și a stivei. În practică, în dialectele existente Transact-SQL, PL / SQL și Informix există o diferență semnificativă față de standard, atât în \u200b\u200bdeclarația, cât și în utilizarea parametrilor, declarația de variabile și în apelul subrutinei. Microsoft recomandă aplicarea următoarei aproximări pentru a estima dimensiunea memoriei de procedură stocată:
\u003d (numărul maxim de utilizatori de lucru simultan) * (mărimea însăși plan mare Execuție) * 1.25. Determinarea dimensiunii planului de execuție în pagini se poate face utilizând comanda: memoria DBCC.

Procedura de apel

În multe DBM-uri existente, apelul de proceduri stocate se efectuează utilizând operatorul:

Executați procedura [(][)]

Notă: Apelarea procedurilor stocate pot fi făcute din aplicație, o altă procedură stocată sau un mod interactiv.

Un exemplu de anunț al procedurii

Crearea procedurii PROC1 AS // declară procedura
Declarați cursorul Cur1 pentru Selectați Sname, Orașul de la vânzări de vânzări În cazul în care ratingul\u003e 200/9 declară
Deschide cursul // deschide cursorul
FETCH Următorul de la CUR1 // Citiți datele de la cursor
În timp ce @@tch_status \u003d 0
Începe.
FETCH Următorul de la Cur1
Sfârșit.
Închideți cursul // închide cursorul
Dealocați cur1.
Executați PROC1 // Rulați procedura

Polimorfism
Două subrutine cu același nume pot fi create în aceeași diagramă dacă parametrii acestor două subrutine trebuie să însemne între ele, astfel încât să se poată distinge. Pentru a distinge între două subrutine cu același nume în aceeași diagramă, fiecare dintre acestea are un nume alternativ și unic (nume specific). Un astfel de nume poate fi indicat în mod explicit când se determină subrutina. La apelarea subrutinelor, dacă există mai multe nume identice, definiția subrutinei dorită este efectuată în mai multe etape:
. Definiți inițial toate procedurile cu nume specificat.Și dacă nu există astfel de astfel de funcții cu numele specificat.
. Pentru o analiză ulterioară, numai acele subrotine sunt lăsate în legătură cu care acest utilizator Are un privilegiu pentru execuție (execuție).
. Pentru ei, cei ale căror număr de parametri corespund numărului de argumente de apel este selectat. Sunt verificate tipurile de date specificate în parametrii și poziția acestora.
. Dacă rămâne mai mult de o subrutină, atunci numele de calificare este ales.
În practică, polimorfismul Oracle este susținut pentru funcții declarate numai în pachet, [E-mail protejat] - În diferite scheme, iar în Sybase și MS SQL Server, supraîncărcarea este interzisă.

Proceduri de eliminare și schimbare
Pentru a șterge procedura, operatorul este utilizat:

Pentru a modifica procedura, se utilizează operatorul:

Modificați procedura. [([{In | out | inut}])]
Începe. [Atomic]

Sfârșit.

Privilegii pentru executarea procedurilor

Grant Executați. La. |Public [Cu opțiunea de finanțare]

Proceduri de sistem
Multe DBMS (inclusiv SQL Server) au un anumit set de proceduri stocate de sistem încorporate care pot fi utilizate în scopurile lor.

1. Porniți linia în procedurile dvs. - setați NoCount On: Cu fiecare expresie DML, SQL Server ne returnează cu atenție un mesaj care conține numărul de înregistrări procesate. Aceasta informatie Poate fi util pentru noi în timpul depunerii codului, dar după ce va fi complet inutil. Prescrierea setați Nocount, dezactivăm această caracteristică. Pentru procedurile stocate care conțin mai multe expresii sau \\ și cicluri, această acțiune poate oferi o creștere semnificativă a performanței, deoarece numărul de trafic va fi redus semnificativ.

Creați Proc dbo.Procame.
La fel de
Stabiliți nocount;
- există un cod de procedură
Selectați coloana1 de la dbo.tbltable1
- TRANSCLUDE SET NONT în sursă
Setați nocount;
Merge.

2. Utilizați numele schemei cu numele obiectului: Ei bine, cred că este clar. Această operație spune serverului unde să caute obiecte și în loc să se agită aleatoriu în coșul său, el va ști imediat unde trebuie să meargă și ce să ia. Cu un număr mare de baze de date, tabele și proceduri stocate, se poate salva în mod semnificativ timpul și nervii.

Selectați * de la dbo.mytable - în acest fel face bine
- in schimb
Selectați * de la Mytable - așa că faceți rău
- Procedură comună
Exec dbo.myproc to-up bine
--In schimb
Exec Myproc - Închideți!

3. Nu utilizați prefixul "SP_" în numele procedurilor sale stocate: Dacă numele procedurii noastre începe cu SP_, SQL Server va căuta mai întâi în baza de date principală. Faptul este că acest prefix este utilizat pentru procedurile stocate de servere interne personale. Prin urmare, utilizarea sa poate duce la costuri suplimentare și chiar rezultat incorect, dacă procedura cu același nume cum ați găsit în baza sa.

4. Utilizați dacă există (selectați 1) în loc de dacă există (selectați *): Pentru a verifica disponibilitatea unei intrări într-un alt tabel, folosim o expresie dacă există. Această expresie Returnează adevărat dacă una dintre exprimarea internă este returnată cel puțin o propoziție, nu contează "1", toate difuzoarele sau mesele. Datele acuate, în principiu, nu sunt utilizate. Astfel, pentru a comprima traficul în timpul transferului de date, este mai logic să se utilizeze "1", după cum se arată mai jos:

Dacă există (selectați 1 de la SysObjects
În cazul în care numele \u003d "mytable" și tip \u003d "U")

5. Utilizați încercarea de captură pentru a prinde erori: Până la 2005 servere, după fiecare cerere, în procedură au fost scrise un număr mare de verificări de eroare. Mai mult cod consumă întotdeauna mai multe resurse și mai mult timp. Din 2005 SQL Server, "Ohm a apărut mai corect și calea convenabilă Soluții la această problemă:

Încercați să încercați.
--Codul
Încercați sfârșitul.
Începe captura.
- Erori calme Cod
Cap de cap.

Concluzie
În principiu, astăzi am totul. Repet încă o dată că aici sunt doar aceste tehnici pe care le-am folosit personal în practica dvs. și pot garanta eficacitatea lor.

P.S.
Primul meu post, nu judecați strict.

Este determinat conceptul de proceduri stocate. Sunt date exemple de creare, modificare și utilizare a procedurilor stocate cu parametri. Definiția parametrilor de intrare și ieșire este dată. Sunt date exemple de creare și apelare a procedurilor stocate.

Conceptul procedurii stocate

Proceduri stocate reprezintă grupuri legate de ceilalți operatori SQL, a căror aplicare face ca lucrarea unui programator să fie mai ușoară și mai flexibilă pentru a efectua procedură stocată Adesea se dovedește a fi mult mai simplă decât secvența de declarații SQL individuale. Procedurile stocate sunt un set de comenzi constând din una sau mai multe declarații sau funcții SQL și stocate în baza de date în formularul de compilare. Performanță în baza de date proceduri stocate În loc de declarații SQL individuale, oferă utilizatorului următoarele avantaje:

  • operatorii necesari sunt deja incluși în baza de date;
  • toți au trecut scena analiza sintactică. și sunt în format executabil; inainte de efectuarea procedurii stocate SQL Server generează un plan de execuție pentru aceasta, își îndeplinește optimizarea și compilarea;
  • proceduri stocate A sustine programare modulară Deoarece vă permit să întrerupeți sarcini mari pentru independente, mai mici și convenabile în partea de control;
  • proceduri stocate poate provoca alții proceduri stocate și funcții;
  • proceduri stocate pot fi cauzate de programe aplicate de alte tipuri;
  • obișnuit, proceduri stocate se efectuează mai repede decât secvența operatorilor individuali;
  • proceduri stocate Este mai ușor de utilizat: pot consta din zeci și sute de comenzi, dar pentru lansarea lor este suficientă pentru a specifica doar numele dorit procedură stocată. Acest lucru vă permite să reduceți dimensiunea solicitării trimise de la client la server și, prin urmare, sarcina din rețea.

Proceduri de stocare în același loc în care acestea sunt executate, oferă o scădere a cantității de date transmise în rețea și îmbunătățește performanța generală a sistemului. Aplicație proceduri stocate Simplifică acompaniamentul complexelor de software și le schimbă. De obicei, toate limitările integrității sub formă de reguli și algoritmi de prelucrare a datelor sunt implementate pe serverul de bază de date și sunt disponibile la aplicația finală sub forma unui set. proceduri stocatecare reprezintă interfața de procesare a datelor. Pentru a asigura integritatea datelor, precum și în scopuri de securitate, aplicația nu primește, de obicei, acces direct la date - toate lucrările cu acestea se efectuează prin apelarea la anumite proceduri stocate.

O abordare similară face ca o modificare foarte simplă a algoritmilor de prelucrare a datelor, devenind imediat disponibilă pentru toți utilizatorii de rețea și oferă posibilitatea de a extinde sistemul fără a face modificări aplicației în sine: Schimbarea suficientă procedură stocată Pe serverul de baze de date. Dezvoltatorul nu are nevoie să recompile aplicației, să creeze copii ale acestuia, precum și să instruiască utilizatorii despre necesitatea de a lucra cu noua versiune. Utilizatorii pot să nu sugereze că se fac modificări ale sistemului.

Proceduri stocate Există, indiferent de tabele sau de orice alte obiecte de bază de date. Ele sunt numite de programul client, celălalt procedură stocată sau declanșator. Dezvoltatorul poate gestiona drepturile de acces la procedură stocată, permițând sau interzicerea executării acestuia. Modificați codul procedură stocată Numai proprietarul sau un membru al rolului bazei de date fixe este permis. Dacă este necesar, puteți transfera drepturile de posesie de la un utilizator la altul.

Proceduri stocate în MS SQL Server MS

Când lucrați cu SQL Server, utilizatorii își pot crea propriile proceduri care implementează anumite acțiuni. Proceduri stocate sunt obiecte de bază de date cu drepturi depline și, prin urmare, fiecare dintre ele este stocată într-o bază de date specifică. Apel direct procedură stocată Este posibil numai dacă se efectuează în contextul bazei de date unde se află procedura.

Tipuri de proceduri stocate

SQL Server are mai multe tipuri proceduri stocate.

  • Sistemic proceduri stocate Concepute pentru a efectua diverse acțiuni administrative. Aproape toate acțiunile de administrare a serverului sunt efectuate cu ajutorul lor. Se poate spune că sistemul proceduri stocate Acestea sunt o interfață care oferă o lucrare cu tabele de sistem, care, în cele din urmă, este redusă la schimbarea, adăugarea, ștergerea și eșantionarea datelor din tabelele de sistem și bazele de date ale utilizatorilor. Sistemic proceduri stocate Există prefix SP_, stocate într-o bază de date de sistem și poate fi cauzată în contextul oricărei alte baze de date.
  • Personalizat proceduri stocate Punem în aplicare anumite acțiuni. Proceduri stocate - Obiect de bază de date completă. Ca rezultat, fiecare procedură stocată Situat într-o bază de date specifică, unde se efectuează.
  • Temporar proceduri stocate Există doar ceva timp, după care sunt distruse automat de server. Ele sunt împărțite în local și global. Local temporar. proceduri stocate Pot fi cauzate numai de acel compus în care sunt create. La crearea unei astfel de proceduri, trebuie să dea un nume pornind de la un simbol #. Ca toate obiectele temporare, proceduri stocate Acest tip este șters automat când utilizatorul este deconectat, reporniți sau opriți serverul. Temporară globală proceduri stocate Disponibil pentru orice conexiuni de server pe care există aceeași procedură. Pentru ao determina, este suficient să-i dați un nume care începe cu ## caractere. Aceste proceduri sunt șterse la repornirea sau oprirea serverului, precum și la închiderea conexiunii, în contextul căruia au fost create.

Crearea, modificarea și îndepărtarea procedurilor stocate

Creatură procedură stocată sugerează următoarele sarcini:

  • definiția tipului creat procedură stocată: temporar sau utilizator. În plus, puteți crea propriul dvs. sistemic procedură stocatăCând atribuiți un nume cu prefixul SP_ și plasându-l în baza de date a sistemului. O astfel de procedură va fi disponibilă în contextul oricărei baze de date locale a serverului;
  • planificarea drepturilor de acces. În timp ce creează procedură stocată Ar trebui să se țină cont de faptul că va avea aceleași drepturi de acces la obiectele bazei de date, care și-a creat utilizatorul;
  • definiție parametrii procedurii stocate. Ca și procedurile care fac parte din cele mai multe limbi de programare, proceduri stocate pot avea parametri de intrare și ieșire;
  • codul de dezvoltare procedură stocată. Codul de procedură poate conține o secvență de comenzi SQL, inclusiv apelul altora. proceduri stocate.

Crearea unui nou și modificarea disponibilă procedură stocată Exercitat folosind următoarea comandă:

<определение_процедуры>:: \u003d (Creați | alter) proc name_name [; număr] [(@ parametru_name tip_data) [\u003d implicit]] [, ... N] ca sql_ [... n]

Luați în considerare parametrii acestei comenzi.

Folosind SP_, #, ## Prefixele create de procedură pot fi definite ca fiind sistematice sau temporare. Așa cum se poate observa din sintaxa de comandă, nu este permisă specificarea numelui proprietarului la care procedura creată, precum și numele bazei de date, unde trebuie plasate. Astfel încât să postați crearea procedură stocată Într-o bază de date specifică, trebuie să executați comanda Creare procedură în contextul acestei baze de date. Când manipulați corpul procedură stocată Obiectele din aceeași bază de date pot utiliza nume scurte, adică fără a specifica numele bazei de date. Când trebuie să vă referiți la obiecte situate în alte baze de date, specificând numele bazei de date.

Numărul din nume este un număr de identificare. procedură stocată, determinând unic în grupul de procedură. Pentru ușurința procedurilor de gestionare, logic același tip proceduri stocate Puteți să vă grupați prin atribuirea acelorași nume, dar numere de identificare diferite.

Pentru a transfera intrarea și ieșirea în cadrul creat procedură stocată Se pot folosi parametrii, ale căror nume, cum ar fi variabilele locale, ar trebui să înceapă cu simbolul @. unu procedură stocată Puteți seta mulți parametri separați prin virgule. În corpul procedurii, variabilele locale nu trebuie aplicate, ale căror nume au coincis cu numele parametrilor acestei proceduri.

Pentru a determina tipul de date care vor avea corespunzător procedura stocată a parametrilor, Orice tip de date SQL sunt potrivite, inclusiv definite de utilizator. Cu toate acestea, tipul de date ale cursorului poate fi utilizat numai ca parametrul de ieșire procedură stocată. Cu ieșirea cu cuvânt cheie.

Prezența rezultatelor cuvântului cheie înseamnă că parametrul corespunzător este conceput pentru a returna datele de la procedură stocată. Cu toate acestea, acest lucru nu înseamnă că parametrul nu este potrivit pentru transmiterea valorilor în procedură stocată. Specificarea cuvântului cheie de ieșire prescrie serverul la plecare procedură stocată Atribuiți valoarea curentă a parametrului variabil local, care a fost specificat atunci când procedura este numită valoarea parametrului. Rețineți că atunci când se precizează ieșirea cuvântului cheie, valoarea parametrului corespunzător la apelarea procedurii poate fi specificată numai utilizând o variabilă locală. Nu este permisă utilizarea unor expresii sau constante admise pentru parametrii convenționali.

Varitoarea cuvântului cheie este utilizat împreună cu parametrul de ieșire având un tip de cursor. Determină că parametrul de ieșire Va fi un set rezultat.

Cuvântul cheie implicit este valoarea care va dura corespunzătoare parametrul implicit. Astfel, când se numește procedura, nu puteți specifica valoarea parametrului corespunzător.

Deoarece serverul lade planul de execuție a interogării și a compilat codul, la apelul ulterior, procedurile vor fi utilizate deja. Cu toate acestea, în unele cazuri, este încă necesar să se recomigureze codul procedurii. Specificarea cuvântului cheie recompilul prevede sistemul pentru a crea un plan de execuție procedură stocată Cu fiecare apel.

Parametrul de replicare este în cerere atunci când replicarea datelor și includerea creatului procedură stocată Ca articol de publicat.

Cuvântul cheie de criptare prescrie codul de criptare a serverului procedură stocatăcare poate oferi protecție împotriva utilizării algoritmilor de drepturi de autor care implementează procedură stocată.

Întrucât cuvântul cheie este situat la începutul corpului procedură stocată. Un set de comenzi SQL, cu care acesta sau altul vor fi implementate. În corpul procedurii, se pot aplica aproape toate comenzile SQL, sunt declarate tranzacțiile, blocarea este setată și cealaltă proceduri stocate. Ieșiți de la procedură stocată Puteți implementa utilizând comanda de returnare.

Eliminarea procedurii stocate Realizat de echipă:

Procedura de picătură (nume) [, ... n]

Efectuarea procedurilor stocate

Pentru efectuarea procedurilor stocate Comanda este utilizată:

[[Exec [ute] name_name_name [; număr] [[@ parameter_name \u003d] (valoare | @ name_name) |] [, ... N]

Dacă apelul procedură stocată Nu este singura comandă din pachet, este necesară prezența comenzii Execute. Mai mult decât atât, această comandă este necesară pentru a apela procedura de la corpul unei alte proceduri sau declanșare.

Utilizarea cuvântului cheie de ieșire la apelarea procedurii este permisă numai pentru parametrii care au fost anunțați când crearea unei proceduri Cu ieșire de cuvinte cheie.

Când apelați la procedură, implicit de cuvinte cheie este specificat pentru parametru, acesta va fi utilizat valoare implicită. Firește, cuvântul implicit specificat este permis numai pentru acei parametri pentru care este determinată. valoare implicită.

Din sintaxa comenzii executate, este clar că numele parametrilor pot fi omise atunci când procedura este apelată. Cu toate acestea, în acest caz, utilizatorul trebuie să precizeze valorile pentru parametrii din aceeași ordine, în care au fost enumerați când crearea unei proceduri. Atribuiți un parametru valoare implicităDoar lipsesc atunci când este enumerată este imposibilă. Dacă doriți să omiteți parametrii pentru care este determinată valoare implicită, nume de parametri suficient de explicit la apel procedură stocată. Mai mult, în așa fel încât să puteți enumera parametrii și valorile lor într-o ordine arbitrară.

Rețineți că atunci când apelați procedura, sunt indicate fie nume de parametri cu valori sau numai valori fără nume de parametru. Combinația lor nu este permisă.

Exemplul 12.1. Procedură fără parametri. Elaborarea unei proceduri de obținere a titlurilor și a costului bunurilor achiziționate de Ivanov.

Creați PROC MY_PROC1 ca produs selectat. Notă, produs. Preț * Tranzacție. Nality ca cost, client.familie de la client Inner Alăturați-vă (Inner Inner Tranzacție pe produs. Power Surse \u003d Tranzacție) pe client. Familia \u003d "Ivanov" Exemplul 12.1. Procedura de obținere a numelor și a valorii bunurilor achiziționate de Ivanov.

Pentru apeluri la procedură Puteți utiliza comenzi:

Exec my_proc1 sau my_proc1

Procedura returnează un set de date.

Exemplul 12.2. Procedură fără parametri. Creați o procedură pentru a reduce prețul produsului de gradul întâi cu 10%.

Pentru apeluri la procedură Puteți utiliza comenzi:

Exec my_proc2 sau my_proc2

Procedura nu returnează niciun fel de date.

Exemplul 12.3. Procedură cu parametrul de intrare. Creați o procedură pentru a obține numele și costul bunurilor pe care clientul le-a achiziționat.

Creați PROC MY_PROC3 @k Varchar (20) ca produs selectat. Notă, produs. Companie * Fundal ca cost, client.familia de la client Inner Alăturați-vă (produs Inner Comunicarea Commodicității: tranzacție) pe client. CodCIENIENT \u003d tranzacție. CodeClient Unde client.familia. [E-mail protejat] Exemplul 12.3. Procedura de obținere a titlurilor și a costului bunurilor care au achiziționat clientul specificat.

Pentru apeluri la procedură Puteți utiliza comenzi:

Exec My_proc3 "Ivanov" sau my_proc3 @ k \u003d "Ivanov"

Exemplul 12.4. . Creați o procedură pentru a reduce prețul unui tip specific de produs în conformitate cu% specificat.

Pentru apeluri la procedură Puteți utiliza comenzi:

Exec My_proc4 "Waffers", 0.05 sau Exec My_proc4 @ t \u003d "Waffers", @ p \u003d 0,05

Exemplul 12.5. Procedură cu parametrii de intrare și valorile implicite. Creați o procedură pentru a reduce prețul unui tip specific de produs în conformitate cu% specificat.

Creați Proc My_proc5 @t Varchar (20) \u003d 'Candy`, @P Float \u003d 0.1 ca actualizare bunuri setate preț \u003d preț * ( [E-mail protejat]) Tipul de cafea [E-mail protejat] Exemplul 12.5. Procedura cu parametrii de intrare și valorile implicite. Creați o procedură pentru a reduce prețul unui tip specific de produs în conformitate cu% specificat.

Pentru apeluri la procedură Puteți utiliza comenzi:

Exec My_proc5 "Waffers", 0.05 sau Exec My_proc5 @ t \u003d "Waffles", @ P \u003d 0,05 sau Exec My_proc5 @ p \u003d 0,05

În acest caz, prețul de dulciuri scade (tipul de tip nu este specificat când procedura este apelată și este luată în mod implicit).

În acest din urmă caz, ambii parametri (și tipul și procentele) nu sunt specificate atunci când se numește procedura, valorile lor sunt luate în mod implicit.

Exemplul 12.6. Procedură cu parametrii de intrare și ieșire. Creați o procedură pentru a determina costul total al bunurilor vândute pentru o anumită lună.

Creați Proc My_proc6 @m Int, @ Ieșire float ca Selectare @ s \u003d suma (produs. Preț * Tranzacție. Naționalitate) de la bunuri Inner Alăturați-vă pe Commodity.stovar \u003d Tranzacție. Grupul pe lună (date) având lună (tranzacție. Date ) [E-mail protejat] Exemplul 12.6. Procedura cu parametrii de intrare și ieșire. Creați o procedură pentru a determina costul total al bunurilor vândute pentru o anumită lună.

Pentru apeluri la procedură Puteți utiliza comenzi:

Declară @st float exec my_proc6 1, @ ST OUTPUT SELECT @st

Acest bloc de comenzi vă permite să determinați costul bunurilor vândute în ianuarie ( parametrul de intrare Luna este indicată egală cu 1).

Creați o procedură pentru a determina numărul total de bunuri achiziționate de firma în care lucrează angajatul specificat.

În primul rând, dezvoltăm o procedură de determinare a companiei în care lucrează angajatul.

Exemplul 12.7. Folosind. proceduri imbricate. Creați o procedură pentru a determina numărul total de bunuri achiziționate de firma în care lucrează angajatul specificat.

Apoi, creăm o procedură care numără numărul total de bunuri, care este achiziționat de compania care vă interesează.

Creare PROC MY_PROC8 @FAM VARCHAR (20), @kol Int Ieșire ca declarare @firm Varchar (20) Exec My_proc7 @ Fam, @ ieșire firmă @ Kol \u003d suma (tranzacție. Naționalitate) de la client Inner Alăturați-vă pe client. CodCIENIENT \u003d tranzacție .Codclatură Grup de către client. Firma având client.firm [E-mail protejat] Exemplul 12.7. Crearea unei proceduri de determinare a numărului total de bunuri achiziționate de firma în care funcționează un angajat specificat.

Apelul de procedură se efectuează utilizând comanda:

Declară @k Int Exec My_proc8 'Ivanov', @ K OUTPUT Selectați @k

Când trebuie să folosesc procedurile stocate și când ar trebui să folosesc vizualizările în SQL Server?

Permisiunile vă permit să creați cereri dinamiceUnde putem transmite parametrii?

Care dintre ele este cea mai rapidă și pe ce bază este mai rapidă decât cealaltă?

Viziunile sau procedurile stocate salvează în mod constant memoria?

Ce înseamnă asta dacă cineva spune că opiniile creează o masă virtuală, iar procedurile creează un tabel de materiale?

Vă rog să-mi spuneți mai multe puncte dacă sunt.

Soluții Colectarea de pe Web de "Care este diferența dintre procedura stocată și reprezentare?"

Formularul reprezintă virtual Masa. Puteți să vă alăturați mai multor mese în prezentare și să utilizați vizualizarea pentru a trimite date ca și cum datele provin dintr-un tabel.

Procedura stocată utilizează parametrii pentru a executa o funcție ... dacă este o actualizare și introducerea datelor sau returnarea valorilor individuale sau seturi de date.

Crearea de reprezentări și proceduri stocate - conține câteva informații de la Microsoft despre când și de ce le folosiți.

Să spunem că am două mese:

coloane tbl_user: .user_id, .user_name, .user_pw

tBL_PROFILE Coloane: .profile_id, .user_id .profile_description

Prin urmare, dacă sunt într-o cerere din aceste tabele, mult ... în loc să fac o conexiune în fiecare pește SQL, aș defini forma, de exemplu:

Creați Vizualizare VW_USER_PROFILE ca selectați AUSER_ID, B.Profile_Descrieri de la TBL_USER A stânga Alăturați-vă TBL_PROFILE B pe A.User_ID \u003d B.USER_ID

Prin urmare, în viitor, dacă vreau să solicit profil_description de către ID-ul de utilizator ... tot ce trebuie să fac este

Selectați Profil_Descrieri de la VW_USER_PROFILE unde User_ID \u003d @id

Acest cod poate fi utilizat în procedura stocată, de exemplu:

Creați procedura dbo.getdesc @id Int, cum începe să selectați profil_description de la vw_user_profile unde user_id \u003d @id sfârșitul

Așa că mai târziu pot apela

Dbo.getdesc 25.

Și voi obține o descriere pentru ID-ul utilizatorului 25, unde 25 este parametrul tău.

Evident, mult mai mult, dar este doar ideea de bază.

Mai întâi trebuie să înțelegeți că ambele sunt lucruri diferite. Procedurile stocate sunt cele mai utilizate pentru declarațiile de ștergere-actualizare. Și depunerea sunt utilizate pentru declarațiile selectate. Și trebuie să utilizați ambele.

În opinia, nu puteți modifica datele.

Vizualizări: Aceasta este o masă virtuală constând din una sau mai multe rânduri și coloane din diferite tabele de bază de date reale. Acesta este un model de rând și coloane de mai multe mese. Nu puteți transmite niciun parametru aici.

Proceduri stocate: Ele sunt un set de aplicații SQL pre-executate în care puteți trimite parametrii ca date de intrare și puteți primi ieșire.

Prezentările pot fi utilizate în procedura stocată, dar procedura stocată nu poate fi utilizată în opinii ...!

Procedura de stocare este utilizată când simple SQL. Doar nu este suficient. Procedurile de stocare conțin variabile, cicluri și apeluri pentru alte proceduri stocate. Acesta este un limbaj de programare, nu limba de interogare.

    Prezentările sunt statice. Gândiți-vă la ele ca niște mese noi cu un aspect specific, iar datele din ele sunt create "în zbor" folosind cererea cu care l-ați creat. Ca și în orice tabel SQL, puteți să-l sortați și să îl filtrați cu unde, grupați și să comandați prin.

    Depinde de ceea ce faci.

    Depinde de baza de date. Vizionări simple Pur și simplu porniți interogarea și filtrează rezultatul. Dar astfel de baze de date, cum ar fi Oracle, vă permit să creați o reprezentare "materializată", care este în principal un tabel care este actualizat automat când datele de bază sunt modificate.

    Reprezentarea materializată vă permite să creați indexuri în coloanele de trimitere (în special pe coloanele calculate care nu există oriunde în baza de date).

    Nu înțeleg despre ce vorbești.

Principala diferență este că atunci când solicitați o vizualizare, această definiție este introdusă în solicitarea dvs. Procedura poate da, de asemenea, rezultatele interogării, dar este compilat și atât de repede. O altă opțiune este vizualizarea indexată.

SQL View este un tabel virtual bazat pe sQL Solicitare SELECTAȚI. Prezentarea se referă la una sau mai multe tabele de bază de date existente sau la alte opinii. Aceasta este o instantanee instantanee baze de date, în timp ce procedura stocată este un grup de operatori Trandact-SQL, compilat într-un singur plan de execuție.

Vizualizare - Demonstrație simplă a datelor stocate în tabelele de bază de date, în timp ce procedura stocată este un grup de operatori care pot fi executați.

Prezentarea este mai rapidă deoarece afișează datele din tabelele la care procedura de stocare efectuează instrucțiuni SQL.

Verificați acest articol: Vizualizarea procedurilor stocate. Exact ceea ce căutați

@Patrick are dreptate cu ceea ce a spus, dar pentru a răspunde la celelalte întrebări, vizualizarea vă va crea în memorie și, în funcție de tipul de îmbinare, de date și dacă se face o agregare, poate fi un aspect destul de foame.

Procedurile stocate efectuează toată procesarea sau utilizarea tabelului Temp Hash, de exemplu, # TMPablet1 sau în memorie cu @ TMPablet1. În funcție de ceea ce vrei să spui.

Procedura stocată este similară cu funcția, dar este numită numele direct. În loc de funcții care sunt efectiv utilizate în cadrul cererii în sine.

Evident, cea mai mare parte a tabelului de memorie este mai rapidă dacă nu extrageți o mulțime de date.

Mash nu este complet direct atunci când presupune că nu puteți schimba datele din prezentare. Deci, din punctul de vedere al lui Patrick

Creați Vizualizare VW_USER_PROFILE ca selectați AUSER_ID, B.PROFILE_Descrieri de la TBL_USER O stânga Alăturați-vă TBL_PROFILE B pe A.User_ID \u003d B.USER_ID

Pot să actualizez datele ... De exemplu, pot face oricare dintre acestea ...

Actualizați VW_USER_PROFILE SET Profile_Description \u003d "Manager" unde user_id \u003d 4

UPDATE TBL_PROFILE SET Profil_Description \u003d "Manager" unde user_id \u003d 4

Nu puteți introduce în această idee, deoarece nu toate câmpurile sunt prezente în întreaga masă și presupun că profilul este cheia primară și nu poate fi nulă. Cu toate acestea, uneori puteți introduce inserția în prezentare ...

Am creat o idee tabelul existentFolosind ...

Creați junk View ca selectați * de la

Inserați în valori junk (cod, nume) ("Glyn", "Glyn Roberts"), ("Mary", "Maryann Roberts")

Ștergeți din junk unde ID\u003e 4

Și introduceți și Ștergerea a funcționat în acest caz

Evident, nu puteți actualiza niciun câmp care sunt agregate sau calculate, dar orice reprezentare care este pur și simplu o reprezentare directă trebuie actualizată.

Dacă vizualizarea conține mai mult de un tabel, nu puteți introduce sau șterge, dar dacă vizualizarea este un subset de un tabel, puteți de obicei.

În plus față de comentariile de mai sus, aș dori să adaug câteva comentarii privind opiniile.

  1. Prezentările pot fi folosite pentru a ascunde complexitatea. Imaginați-vă un scenariu în care 5 persoane lucrează la proiect, dar numai unul dintre ele este prea bun cu o bază de date, cum ar fi asociații complexe. Într-un astfel de scenariu, poate crea specii care pot fi solicitate cu ușurință de alți membri ai echipei, deoarece solicită orice tabel unic.
  2. Securitatea poate fi ușor implementată. Să presupunem că noi angajat tabele care conțin coloane sensibile, cum ar fi Salariul , numărul SSN. . Aceste coloane nu ar trebui să fie afișate pentru utilizatorii care nu li se permite să le vizualizeze. În acest caz, putem crea o prezentare care va alege coloane într-un tabel care nu necesită autorizație, cum ar fi nume , vârsta I. etc, fără a expune coloane vulnerabile (de exemplu, despre salariu etc., despre care am menționat mai devreme). Acum putem șterge permisiunea pentru o interogare directă la masă. Angajat. Și continuați să citiți permisiunea în prezentare. Astfel, putem implementa securitatea folosind opinii.

Procedurile stocate SQL sunt un modul software executabil care poate fi stocat în diverse obiecte. Cu alte cuvinte, acesta este un obiect în care sunt conținute instrucțiunile SQL. Aceste proceduri stocate pot fi executate în client de programe de aplicații pentru a obține performanță bună. În plus, astfel de obiecte sunt adesea invocate din alte scenarii sau chiar din orice altă partiție.

Introducere

Mulți cred că sunt similari cu procedurile de diverse (respectiv, cu excepția doamnei SQL). Poate că este adevărat. Ei au parametri similari, pot produce valori similare. În plus, în unele cazuri intră în contact. De exemplu, ele sunt combinate cu baze de date DDL și DML, precum și cu funcțiile utilizatorului (numele codului - UDF).

În realitate, au procedurile stocate SQL spectru larg Avantaje care le alocă printre astfel de procese. Securitate, variabilitate de programare, productivitate - toate acestea atrage utilizatorii care lucrează cu baze de date, din ce în ce mai mult. Vârful popularității procedurilor a scăzut pentru perioada 2005-2010, când a fost publicat programul de la Microsoft numit "SQL Server Management Studio". Cu aceasta, a fost mult mai ușor să lucrați cu baze de date, mai practice și mai convenabile. Din an la an, aceasta a câștigat popularitate în programatori. Astăzi este un program absolut familiar care pentru utilizatori, "comunicarea" cu bazele de date, a stat la un par cu "Excel".

Când sunați la o procedură, este procesată instantaneu de către serverul în sine fără procese inutile și intervenția utilizatorului. După aceasta, puteți exercita orice eliminare, execuție, schimbare. Pentru toate acest lucru este răspuns de către operatorul DDL, care singur face cele mai complexe efecte ale procesării obiectelor. Și toate acestea se întâmplă foarte repede, iar serverul nu este de fapt încărcat. O astfel de viteză și performanță vă permit să transmiteți foarte repede cantități mari de informații de la utilizator la server și invers.

Pentru a implementa această tehnologie, există mai multe limbi de programare. Acestea includ, de exemplu, PL / SQL de la Oracle, PSQL în sistemele Interbase și Firebird, precum și clasicul "Microsoft" Transact-SQL. Toate acestea sunt destinate să creeze și să efectueze proceduri stocate, ceea ce permite manipulatoarelor mari de baze de date să utilizeze propriile lor algoritmi. Acest lucru este necesar pentru cei care gestionează astfel de informații, pot proteja toate obiectele de accesul neautorizat al persoanelor terțe și, în consecință, crearea, modificarea sau ștergerea anumitor date.

Productivitate

Aceste obiecte de baze de date pot fi programate în diverse moduri. Acest lucru permite utilizatorilor să aleagă tipul de metodă utilizată, care va fi cea mai potrivită, ceea ce economisește rezistență și timp. În plus, procedura în sine este procesată, ceea ce evită costurile enorme de schimb temporare între server și utilizator. De asemenea, modulul poate fi reprogramat și schimbat la direcția dorită într-un timp absolut. Este în mod deosebit de remarcat viteza cu care începe începerea procedurii stocate SQL: acest proces apare mai rapid decât altele similare cu acesta, ceea ce îl face convenabil și universal.

Siguranță

Acest tip de procesare a informațiilor este diferit de procesele similare prin faptul că garantează o siguranță sporită. Acest lucru este asigurat datorită faptului că accesul altor utilizatori la proceduri poate fi eliminat în întregime. Acest lucru va permite administratorului să efectueze operațiuni cu ei independent, fără teama de a intercepta informații sau acces neautorizat la baza de date.

Transfer de date

Relația dintre procedura stocată SQL și aplicația client este de a utiliza parametrii și valorile returnate. Acestea din urmă nu pot fi transferate în datele din procedura stocată, cu toate acestea, aceste informații (în principal pe solicitarea utilizatorului) și procesate pentru SQL. După ce procedura stocată și-a terminat activitatea, trimite pachete de date înapoi (dar, din nou, dacă se dorește) la aplicația care a cauzat-o diverse metodeCu care poate fi implementat ca apel către procedura stocată SQL și rambursarea, de exemplu:

Transmisia de date utilizând parametrul tipului de ieșire;

Transfer de date utilizând operatorul de returnare;

Transmisie de date utilizând operatorul de selecție.

Și acum ne vom da seama de modul în care acest proces arată din interior.

1. Crearea unei proceduri stocate în SQL

Puteți crea o procedură în MS SQL (Management Studio). După crearea procedurii, aceasta va fi listată într-un nod de baze de date programabil, în care procedura de creare este efectuată de operator. Pentru a efectua procedurile SQL stocate, utilizați procesul de executiv care conține numele obiectului în sine.

La crearea procedurii, numele său apare primul, după care unul sau mai mulți parametri atribuiți acestuia. Parametrii pot fi opționali. După parametrul (parametrii), acesta este, organismul procedurii va fi scris, trebuie să efectuați unele operațiuni necesare.

Faptul este că organismul poate avea variabile locale situate în ea, iar aceste variabile sunt locale și în raport cu procedurile. Cu alte cuvinte, ele pot fi luate în considerare numai în interiorul corpului procedurii. Microsoft SQL. Server. Procedurile stocate în acest caz sunt considerate locale.

Astfel, pentru a crea o procedură, avem nevoie de numele procedurii și cel puțin un parametru ca organism al procedurii. Vă rugăm să rețineți că o opțiune excelentă în acest caz este crearea și executarea procedurii cu numele schemei din clasificator.

Corpul procedurii poate avea un fel de exemplu, cum ar fi crearea unui tabel, introduceți una sau mai multe rânduri de masă, setarea tipului și caracterului bazei de date și așa mai departe. Cu toate acestea, organismul procedurii limitează executarea unor operațiuni în el. Unele dintre restricțiile importante sunt enumerate mai jos:

Organismul nu trebuie să creeze alte proceduri stocate;

Corpul nu trebuie să creeze o înțelegere falsă a obiectului;

Corpul nu trebuie să creeze nici un declanșator.

2. Instalarea variabilei în corpul procedurii

Puteți face variabile locale pentru procedura corpului și apoi vor fi exclusiv în interiorul corpului procedurii. Bună practica este de a crea variabile la începutul corpului procedurii stocate. Dar puteți seta și variabilele oriunde în corpul acestui obiect.

Uneori puteți vedea că mai multe variabile sunt instalate într-o singură linie și fiecare parametru variabil este separat printr-o virgulă. De asemenea, rețineți că variabila are un prefix @. În corpul procedurii puteți seta variabila unde doriți. De exemplu, variabila @ Nume1 poate fi declarată mai aproape de sfârșitul corpului procedurii. Pentru a atribui valoarea variabilei anunțate, se utilizează un set de date cu caracter personal. Spre deosebire de situația când a fost declarată mai mult de o variabilă într-o singură linie, un singur set de date cu caracter personal este utilizat într-o astfel de situație.

Adesea, utilizatorii pun o întrebare: "Cum să atribuiți mai multe valori într-un singur operator în corpul procedurii?" Bine. Întrebarea este interesantă, dar este mult mai ușor să faci ceea ce crezi. Răspuns: Folosind abur, cum ar fi "Selectați var \u003d valoare." Puteți folosi aceste perechi, separarea virgorii.

Într-o mare varietate de exemple, oamenii arată crearea unei proceduri simple stocate și executarea acestuia. Cu toate acestea, procedura poate lua astfel de parametri pe care procesul îl determină va avea valorile apropiate (dar nu întotdeauna). Dacă se potrivesc, procesele corespunzătoare încep în interiorul corpului. De exemplu, dacă creați o procedură care va lua orașul și regiunea de la apelantul și va returna datele despre câți autori se referă la orașul și regiunea corespunzătoare. Procedura va solicita tabelul autorilor bazei de date, de exemplu pub-uri, pentru a efectua această numărare a autorilor. Pentru a obține aceste baze de date, de exemplu, Google încărcați scriptul SQL din pagina SQL2005.

În exemplul anterior, procedura durează doi parametri care limba engleza Condițional va fi numit @State și @City. Tipul de date corespunde tipului definit în aplicație. Corpul procedurii are variabile interne @totalatorii (autorități totale), iar această variabilă este utilizată pentru a-și afișa cantitatea. Se afișează următoarea secțiune de selecție, care contează totul. În cele din urmă, valoarea calculată este afișată în fereastra de ieșire utilizând instrucțiunea de imprimare.

Cum se efectuează o procedură stocată în SQL

Există două modalități de a efectua procedura. Prima cale arată că treceți parametrii, deoarece lista separată de virgulă este executată după numele procedurii. Să presupunem că avem două valori (ca în exemplul anterior). Aceste valori sunt colectate utilizând parametri variabili Proceduri @State și @City. În această metodă de transmitere a parametrilor, ordinea este importantă. Această metodă se numește transferul obișnuit al argumentelor. În cea de-a doua metodă, parametrii sunt deja în mod direct desemnați, iar în acest caz ordinea nu este importantă. Această a doua metodă este cunoscută ca transferul argumentelor numite.

Procedura poate fi oarecum deviată de tipic. Cu toate acestea, ca în exemplul anterior, dar numai aici parametrii sunt mutați. Adică, parametrul @City este stocat mai întâi, iar @State este stocat lângă valoarea implicită. Parametrul implicit este, de obicei, separat separat. Procedurile stocate SQL trec ca parametrii pur și simplu. În acest caz, cu condiția ca parametrul UT să înlocuiască "CA" implicit. În cea de-a doua execuție, o singură valoare a argumentului pentru parametrul @City trece, iar parametrul @State ia "CA" implicit. Programatorii experimentați sfătuiesc că toate variabilele implicite sunt mai aproape de sfârșitul listei de parametri. În caz contrar, execuția nu este posibilă, iar apoi trebuie să lucrați cu transferul argumentelor numite, ceea ce este mai lung și mai dificil.

4. Proceduri stocate SQL Server: Metode de returnare

Există trei modalități importante de a trimite date în procedura stocată cauzată. Acestea sunt enumerate mai jos:

Returnați valoarea procedurii stocate;

Producția procedurilor stocate;

Alegerea uneia dintre procedurile stocate.

4.1 Returnarea valorilor procedurii stocate SQL

În această tehnică, procedura atribuie valoarea variabilei locale și returnează-o. Procedura poate, de asemenea, să returneze în mod direct o valoare constantă. În exemplul următor, am creat o procedură care se întoarce numărul total Autori. Dacă comparați această procedură cu cele anterioare, puteți vedea că valoarea imprimării este înlocuită cu opusul.

Acum, să vedem cum să efectuăm procedura și să afișăm valoarea returnată. Execuția procedurii necesită stabilirea unei variabile și a tipăririi, care se efectuează după întregul proces. Rețineți că în loc de instrucțiunea de tipărire, puteți utiliza operatorul Select, de exemplu, selectați @retValue, precum și ieșirea de ieșire.

4.2 Ieșire parametru de procedură stocată SQL

Valoarea răspunsului poate fi utilizată pentru a returna o variabilă pe care am văzut-o în exemplul anterior. Utilizarea parametrului de ieșire permite procedura de a trimite una sau mai multe valori variabile pentru apelant. Parametrul de ieșire este indicat ca și cum acest cuvânt cheie "ieșire" la crearea unei proceduri. Dacă parametrul este specificat ca parametru de ieșire, obiectul procedurii trebuie să atribuie o valoare. Proceduri stocate SQL, exemple de care pot fi văzute mai jos, caz în care sunt returnate cu informațiile finale.

În exemplul nostru, vor exista două nume de ieșire: @totalatorii și @totalnocontract. Acestea sunt specificate în lista parametrilor. Aceste variabile atribuie valori în cadrul corpului procedurii. Când vom folosi parametrii de ieșire, apelantul poate vedea valoarea setată în corpul procedurii.

În plus, în scenariul anterior, sunt anunțate două variabile pentru a vedea valorile care stabilesc procedurile stocate MS SQL Server în parametrul de ieșire. Apoi, procedura este efectuată prin trimiterea valorii normale a parametrului "CA". Următorii parametri Acestea sunt emise și, prin urmare, variabilele declarate sunt transmise în modul prescris. Rețineți că atunci când treceți variabilele, ieșirea cuvânt cheie. De asemenea, stabilit aici. După ce procedura are succes, valorile returnate de parametrii de ieșire sunt afișați în fereastra Mesaje.

4.3 Selectarea uneia dintre procedurile stocate SQL

Această tehnică este utilizată pentru a returna setul de valori ca tabel de date (înregistrare) la procedura stocată de provocare. In aceea exemplu SQL. Procedura stocată cu parametrii @authid solicită tabelul "Autori" prin filtrarea intrărilor returnate utilizând acest parametru @authid. Declarația SELECT decide că trebuie returnată procedurii stocate de apel. La executarea procedurii stocate, Autorul este transmis înapoi. O astfel de procedură returnează întotdeauna o singură intrare sau una. Dar procedura stocată nu are restricții privind returnarea mai multor înregistrări. Adesea, puteți găsi exemple în care returnarea datelor utilizând parametrii selectați cu participarea variabilelor calculate are loc prin furnizarea mai multor valori rezultate.

In cele din urma

Procedura stocată este destul de gravă modulul software.Returnarea sau transmiterea, precum și stabilirea variabilelor necesare datorită aplicației client. Deoarece procedura stocată se efectuează pe serverul în sine, poate fi evitată schimbul de date în volume uriașe între server și aplicația client (pentru unele calcule). Acest lucru vă permite să reduceți sarcina sQL ServerAsta, desigur, merge la mâna titularilor lor. Unul dintre subspecii sunt stocate procedurile T SQL, dar studiul lor este necesar pentru cei care sunt implicați în crearea de baze de date impresionante. Există, de asemenea, un număr mare, chiar un număr mare de nuanțe care pot fi utile atunci când studiază procedurile stocate, dar este necesar mai mult pentru cei care intenționează să se angajeze strâns în programare, inclusiv profesional.