Utilizarea instrucțiunii în timp ce în procedurile stocate

după ce ați citit acest articol, veți înțelege elementele de bază ale utilizării instrucțiunii în timp ce pentru a scrie o buclă într-o procedură stocată.

toate exemplele pentru această lecție se bazează pe Microsoft SQL Server Management Studio și bazele de date de probă AdventureWorks și WideWorldImporters. Puteți începe să utilizați aceste instrumente gratuite cu ghidul meu Noțiuni de bază folosind SQL Server.

WHILE, BREAK, and CONTINUE

instrucțiunea WHILE este utilizată pentru a executa în mod repetat un bloc de instrucțiuni SQL. Blocul este executat în mod repetat dacă starea declarației WHILE este adevărată.

în timp ce declarațiile formatul general este:

WHILE conditionBEGIN -- code block run when condition is TRUEEND

dacă vă aflați repetarea declarații, în special cele care se încadrează într-un model, atunci, există posibilitatea de a utiliza o declarație în timp ce pentru a salva unele dactilografiere și de a face programul mai distractiv de a scrie!

de exemplu, să presupunem că trebuie să creați un tabel temporar care să conțină data de început a fiecărei săptămâni. Desigur, am putea scrie 52 de declarații individuale de inserare, dar asta este plictisitor!

INSERT INTO @myTable VALUES (0, 12/31/2017)INSERT INTO @myTable VALUES (1, 01/07/2018)INSERT INTO @myTable VALUES (2, 01/14/2018)…INSERT INTO @myTable VALUES (52, 12/30/2018 )

folosiți în schimb comanda WHILE pentru a parcurge cele 52 de săptămâni, introducând data de început a fiecărei săptămâni în tabel. Puteți vedea cum facem acest lucru în exemplul următor.

--Setup VariablesDECLARE @myTable TABLE(WeekNumber int, DateStarting smalldatetime)DECLARE @n int = 0DECLARE @firstWeek smalldatetime = '12/31/2017'--Loop Through weeksWHILE @n <= 52BEGIN INSERT INTO @myTable VALUES (@n, DATEADD(wk,@n,@firstWeek)); SELECT @n = @n + 1END--Show ResultsSELECT WeekNumber, DateStartingFROM @myTable

ceea ce face această bifare este funcția DATEADD. Observați că DATEADD (wk, @n, @firstWeek) adaugă o săptămână de lucru de zile la data noastră @firstWeek. În prima iterație se adaugă 0 săptămâni. În a doua iterație, @n = 1, deci adaugă 1 săptămână și așa mai departe.

iată câteva puncte:

  • instrucțiunea WHILE testează variabila @n. Dacă este <= 52, blocul de program (verde), poate rula.
  • de fiecare dată când blocul este rulat, variabila @n este incrementată cu una. Acest lucru este important. Dacă acest lucru nu s-ar întâmpla, valoarea nu ar fi niciodată mai mare de 52, iar programul nostru ar executa blocul de cod, continuu, fără sfârșit. Aceasta se numește buclă infinită.
  • armare la # 2 de mai sus! Este important ca bucla dvs. să aibă o condiție finală. În cazul nostru, ne asigurăm că variabila @n este incrementată și că va fi în cele din urmă mai mare de 52.
  • folosim valoarea @n pentru a „conduce” valoarea datei. Adăugând săptămâni la data noastră de bază, @firstWeek, putem calcula datele ulterioare ale săptămânii de început.

aici sunt rezultatele:

în timp ce exemplu declarație rezultate

după cum puteți vedea, din această buclă simplu, am fost capabili de a crea unele date interesante, și a fost mai distractiv de a face wo folosind funcții Data, decât să „Cod greu” declarația. Utilizarea buclelor este foarte puternică.

folosind BREAK pentru a scurtcircuita o buclă

instrucțiunea BREAK este utilizată pentru a ieși forțat dintr-un bloc de cod al declarației WHILE.

în exemplul următor am modificat declarația WHILE. Acum folosește declarația BREAK, care este colorată în verde.

există două modificări:

  1. condiția enunțului WHILE se evaluează întotdeauna la TRUE, deoarece @n este întotdeauna mai mare sau egal cu zero.
  2. instrucțiunea IF testează condiția finală și, atunci când este adevărată, execută pauză.
DECLARE @myTable TABLE(WeekNumber int, DateStarting smalldatetime)DECLARE @n int = 0DECLARE @firstWeek smalldatetime = '12/31/2017'WHILE @n > -1BEGIN INSERT INTO @myTable VALUES (@n, DATEADD(wk,@n,@firstWeek)); SELECT @n = @n + 1 IF @n > 52 BREAKEND

instrucțiunea BREAK este utilă pentru încheierea execuției. Dacă în timp ce declarațiile sunt imbricate, atunci bucla cea mai interioară este ieșită.

folosind continuare pentru a reseta o buclă

instrucțiunea continuare repornește un bloc de cod în timp ce declarația lui. Orice declarații găsite după continuare nu sunt executate.

de exemplu, în cele ce urmează, instrucțiunea PRINT nu este executată niciodată.

DECLARE @myTable TABLE(WeekNumber int, DateStarting smalldatetime)DECLARE @n int = 0DECLARE @firstWeek smalldatetime = '12/31/2017'WHILE @n > -1BEGIN INSERT INTO @myTable VALUES (@n, DATEADD(wk,@n,@firstWeek)); SELECT @n = @n + 1 IF @n > 52 BREAK ELSE CONTINUE PRINT ‘I Never get executed’END

motivul este fie instrucțiunea BREAK force an EXIT, fie când continuarea este rulată, bucla este resetată la începutul blocului.



Lasă un răspuns

Adresa ta de email nu va fi publicată.