Există mai multe restricții cu privire la includerea diferitelor declarații Transact-SQL din pachet. Cel mai important dintre acestea este faptul că, dacă pachetul conține date care descriu instrucțiunile CREATE VIEW, CREATE PROCEDURE sau CREATE TRIGGER, atunci acesta nu poate conține alte declarații. Cu alte cuvinte, o astfel de declarație trebuie să fie singurul pachet declarație. Limba Manual de definire a datelor sunt separate de instrucțiuni GO.
Fiecare extensie limbaj Transact-SQL de procedură este considerată separat în următoarele secțiuni.
unitate de instruire
Instrucțiuni de bloc poate consta dintr-una sau mai multe instrucțiuni de limbaj Transact-SQL. Fiecare unitate începe cu declarația BEGIN și se termină cu sfârșitul de instrucțiuni. așa cum se arată mai jos:
Unitatea poate fi plasată în interiorul declarație, dacă că, în funcție de condițiile specifice permit executarea unuia sau mai multor instrucțiuni.
Instrucțiunea IF
DACĂ instrucțiuni limbaj Transact-SQL corespunde ghidului omonim, susținută de limbaje de programare aproape toate. DACĂ instrucțiune execută una sau mai multe componente ale unui bloc de declarații în cazul în care o expresie logică după cuvântul cheie IF, returnează true (adevărat). Dacă instrucțiunea IF conține declarația ELSE. apoi, cu condiția ca expresia logică returnează false (fals), al doilea grup de instrucțiuni este executată.
Mai jos este un exemplu de utilizare a unui condiționată instrucțiune IF:
Acest exemplu demonstrează utilizarea blocului de instrucțiuni în instrucțiunea IF. Următoarea expresie booleană instrucțiune IF:
returnează true (adevărat) pentru baza de date SampleDb. De aceea, instrucțiunea va fi executată PRINT, un membru al dintre declarația IF. Acordați atenția asupra faptului că, în acest exemplu utilizează un subinterogare pentru a reveni numărul de rânduri (de COUNT funcție agregată), satisfăcând ofertele unde (ProjectNumber = „p1“).
Instrucțiuni de operator ELSE Dacă în exemplul conține două instrucțiuni: PRINT, și SELECT. Prin urmare, pentru efectuarea acestor instrucțiuni trebuie să fie închise în blocul dintre cuvintele cheie BEGIN și END. (Instrucțiuni de imprimare este o extensie procedurală și returnează un mesaj definit de utilizator.)
ÎN TIMP CE instrucţiuni
instrucțiuni în timp ce efectuează unul sau mai mulți prizonieri în blocul de declarații în timp, în timp ce (în timp) expresia logică returnează true (adevărat), și anume Acesta vă permite să creați o buclă. Cu alte cuvinte, în cazul în care expresia se evaluează la TRUE, instrucțiunea este executată sau bloc de instrucțiuni, după care verificarea se face din nou expresia. Acest proces se repetă atâta timp cât expresia nu returnează FALSE (fals).
Bloc interior cu instrucțiuni în timp poate să conțină una sau două instrucțiuni opționale utilizate pentru a controla executarea instrucțiunilor din cadrul blocului: BREAK sau CONTINUĂ. instrucțiune BREAK oprește executarea buclei și începe executarea instrucțiunilor imediat după acest bloc. O declarație CONTINUĂ oprește executarea numai iterație bucla de curent și începe executarea următoarei iterație.
Următorul exemplu ilustrează utilizarea instruirii WHILE:
În acest exemplu, bugetele tuturor proiectelor a crescut cu 10%, atât timp cât bugetul total nu depășește 500 000 $ Cu toate acestea, performanța unității se va opri, chiar dacă aceasta este mai mică de 500.000 $ bugetul total, cu excepția cazului în bugetul unuia dintre proiectele vor depasi $ de 240.000 de.
variabile locale
Variabilele locale sunt importante extensie procedurală limbaj Transact-SQL. Ele sunt folosite pentru a stoca valori de orice fel în loturi și rutine. Local, acestea sunt numite, pentru motivul că acestea pot fi utilizate numai în ambalajul în care sunt declarate. (Database Engine suportă, de asemenea, variabile globale care au fost deja discutate mai devreme.)
Toate variabilele de pachete locale sunt declarate folosind instrucțiunea DECLARE. (Sintaxa acestei instrucțiuni este dat în exemplul de mai jos) variabilă Determinarea constă în numele variabilei și tipul său de date. Numele variabilelor locale în pachet sunt întotdeauna prefixate cu @. Atribuirea valorilor variabile locale se realizează:
folosind o formă specială a instrucțiunii SELECT;
folosind instrucțiunea SET;
DECLARĂM instrucțiuni direct prin semnul = (de exemplu, bani @extra_budget = 1500).
Folosind primele două metode de a atribui o valoare unei variabile locale în exemplul următor:
instrucțiuni de ambalare, în acest exemplu calculează media bugetelor tuturor proiectelor, și compară valoarea obținută cu proiectul de buget p1. În cazul în care p1 bugetul proiectului mai mică decât media tuturor bugetelor, valoarea sa este mărită cu valoarea unei @extra_budget variabile locale.
Instrucțiuni procedurale mixte
Extensiile de procedură limba Transact-SQL și să conțină următoarele instrucțiuni:
instrucțiune RETURN îndeplinește aceeași funcție în cadrul pachetului, și că instruirea în interiorul buclei WHILE BREAK. Cu alte cuvinte, RETURN de instrucțiuni se oprește executarea pachetului și începe executarea primei instrucțiuni după pachet.
GOTO instrucțiuni trece de control, atunci când pachetul declarație Transact-SQL într-un marker pachet desemnat. Ghid de RAISEERROR afișează un mesaj de eroare definite de utilizator și setează o eroare de sistem de pavilion. Numărul de eroare în mesajul definit de utilizator pentru a fi mai mult de 50.000, ca toate numerele de eroare mai mici sau egale cu 50.000 determinată de sistem și o componentă a motorului bazei de date rezervate. Valorile numerelor de eroare sunt salvate în eroare variabila globală @@.
Declarație WAITFOR definește perioada de întârziere de timp (parametrul de întârziere) sau un anumit moment (cu parametrul TIME), pentru care sistemul trebuie să aștepte înainte de a efectua următoarele instrucțiuni pachet. Sintaxa acestei instrucțiuni este următoarea:
parametru intarzierii specifica sistemul de baze de date așteptați până când expiră perioada de timp specificată, și parametrul TIME indică punctul de timp, într-unul dintre formatele valabile la care se așteaptă. TIMEOUT Parametru. urmat de un argument timeout, acesta setează timpul în milisecunde, în timpul căreia este necesar să se aștepte sosirea mesajelor în coada de așteptare.
Excepție de manipulare prin instrucțiuni TRY, CAPTURA și leapădă
Excepție (excepție) se numește problema (de obicei, o eroare), care nu permite programului să continue. Programul de funcționare nu poate continua să efectueze din cauza lipsei de informații necesare pentru a gestiona eroarea în această parte a programului. Prin urmare, sarcina de procesare de eroare este transferat într-o altă parte a programului.
Instrucțiunea Rolul TRY este o excepție este prins. (Având în vedere că punerea în aplicare a acestui proces necesită de obicei mai multe instrucțiuni, termenul general aplicabil „unitate TRY“, în loc de „TRY utilizator“). În cazul în care are loc la blocul TRY excepție, componentă de sistem, numit handler excepție. Acesta oferă o excepție pentru a procesa alte părți ale programului. Această parte a programului este indicat de cuvântul cheie și, prin urmare, se numește bloc CAPTURA CAPTURA.
Excepție de manipulare folosind instrucțiuni CAPTURĂ încerca și este o metodă obișnuită de erori de manipulare folosite în limbaje de programare moderne, cum ar fi C # și Java.
Excepție de manipulare folosind TRY și captura blocuri da programatorului o mulțime de avantaje, inclusiv următoarele:
excepțiile oferă un mod elegant de a detecta erori, fără să aglomereze codul de instrucțiuni suplimentare;
excepții oferă un mecanism de indicare a erorilor, în loc de a folosi orice semne negative;
programator poate vedea excepție și să le verifice în procesul de compilare.
Utilizarea instrucțiunilor TRY, CAPTURA și leapădă excepții de manipulare se arată în exemplul de mai jos:
Acest exemplu arată cum să execute instrucțiunile de procesare excepție într-un pachet și de a efectua Retroactivitatea performanța întregului grup de instrucțiuni atunci când apare o eroare. Încercarea de a executa un pachet așa cum se arată în exemplul va eșua, iar rezultatul este următorul mesaj:

exemplu executarea de cod este după cum urmează. După finalizarea cu succes a primei declarații INSERT a încercat executarea doua instrucțiuni cauzează o eroare de integritate referențială încălcări. Deoarece toate cele trei instrucțiuni sunt închise într-un bloc TRY, există o excepție de la întregul bloc și de tratare excepție începe executarea blocului catch. executarea de cod în acest bloc efectuează o execuție derulare înapoi a tuturor instrucțiunilor din blocul TRY, și afișează un mesaj. După aceea ARUNCA instrucțiune se întoarce de execuție către apelant. Ca o consecință a tuturor acestor conținutul tabelului Angajatul nu va fi modificat.
Transact-SQL declarație - BEGIN TRANSACTION, COMMIT TRANSACTION, și pentru a începe ROLLBACK, repara și role înapoi tranzacția, respectiv. Subiectul tranzacției, în general, și aceste instrucțiuni, în special, vom lua în considerare într-un articol viitor.