Utilizați IF și WHILE blocks to control program flow
Toate limbile de programare includ elemente care vă ajută să determinați fluxul programului sau ordinea în care sunt executate instrucțiunile. Deși nu sunt prezentate complet ca limbi precum C#, T-SQL oferă un set de cuvinte cheie control-of-flow pe care le puteți utiliza pentru a efectua teste logice și a crea bucle care conțin instrucțiunile de manipulare a datelor T-SQL. În această lecție, veți afla cum să utilizați cuvintele cheie T-SQL IF și WHILE.
Înțelegerea controlului T-SQL al limbii de flux
SQL Server oferă elemente lingvistice care controlează fluxul de execuție a programului în grupuri T-SQL, proceduri stocate și funcții definite de utilizator multistatement. Aceste elemente control-of-flow înseamnă că puteți determina prin programare dacă să executați instrucțiuni și să determinați prin programare ordinea acelor instrucțiuni care ar trebui executate.
Printre aceste elemente se numără, dar nu sunt limitate la:
- DACĂ... ELSE, care execută cod pe baza unei expresii booleene.
- ÎN TIMP CE, care creează o buclă care execută furnizarea unei condiții este adevărată.
- ÎNCEPE... END, care definește o serie de instrucțiuni T-SQL care ar trebui executate împreună.
- Alte cuvinte cheie, de exemplu, BREAK, CONTINUE, WAITFOR și RETURN, care sunt utilizate pentru a accepta operațiuni de control T-SQL de flux.
Iată un exemplu de instrucțiune IF:
IF OBJECT_ID('dbo.tl') IS NOT NULL
DROP TABLE dbo.tl
GO
Utilizați logica condiționată în programele dvs. utilizând IF... ALTFEL
The IF... Structura ELSE este utilizată în T-SQL pentru a executa condiționat un bloc de cod bazat pe un predicat. Instrucțiunea IF determină dacă următoarea instrucțiune sau următoarea blocare (dacă BEGIN... END este utilizat) se execută. Dacă predicatul este evaluat la TRUE, se execută codul din bloc. Atunci când predicatul se evaluează la FALSE sau NECUNOSCUT, blocul nu este executat, cu excepția cazului în care este utilizat cuvântul cheie ELSE opțional pentru a identifica un alt bloc de cod.
În următoarea instrucțiune IF, vă întrebăm baza de date dacă OBJECT_ID IS NULL și, dacă este așa, returnează instrucțiunea PRINT. În acest exemplu, obiectul nu este nul și, prin urmare, FALSE, ceea ce înseamnă că nu va fi executat codul BEGIN/END. Instrucțiunea PRINT se va executa numai dacă obiectul nu există în baza de date.
USE TSQL;
GO
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END;
Din cauza limitărilor cu codul de mai sus doar cu o instrucțiune IF, acest lucru poate fi derutant. Combinarea if și ELSE vă oferă mai multă flexibilitate cu logica din cod și puteți utiliza mai multe instrucțiuni ELSE. Cu utilizarea ELSE, aveți o altă opțiune de executare atunci când predicatul IF se evaluează la FALSE sau NECUNOSCUT, ca în exemplul următor:
IF OBJECT_ID('HR.Employees') IS NULL --this object does exist in the sample database
BEGIN
PRINT 'The specified object does not exist';
END
ELSE
BEGIN
PRINT 'The specified object exists';
END;
În cadrul operațiunilor de manipulare a datelor, utilizarea IF cu cuvântul cheie EXIST poate fi un instrument util pentru verificări eficiente ale existenței, ca în exemplul următor:
IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
PRINT 'Employee has associated orders';
END;
Înțelegerea buclei utilizând instrucțiuni WHILE
Instrucțiunea WHILE este utilizată pentru a executa cod într-o buclă bazată pe un predicat. La fel ca instrucțiunea IF, instrucțiunea WHILE determină dacă următoarea instrucțiune sau un bloc (dacă BEGIN... END este utilizat) se execută. Bucla continuă să se execute atât timp cât condiția se evaluează la TRUE. De obicei, controlați bucla cu o variabilă testată de predicat și manipulată în corpul buclei propriu-zise.
Următorul exemplu utilizează variabila @empid din predicat și își modifică valoarea în BEGIN... Bloc FINAL:
DECLARE @empid AS INT = 1, @lname AS NVARCHAR(20);
WHILE @empid <=5
BEGIN
SELECT @lname = lastname FROM HR.Employees
WHERE empid = @empid;
PRINT @lname;
SET @empid += 1;
END;
Pentru opțiuni suplimentare într-o buclă WHILE, puteți utiliza cuvintele cheie CONTINUE și BREAK pentru a controla fluxul.