Brug IF- og WHILE-blokke til at styre programflowet

Fuldført

Alle programmeringssprog omfatter elementer, der hjælper dig med at bestemme programmets flow eller den rækkefølge, som sætninger udføres i. Selvom T-SQL ikke er så udvalgt som sprog som C#, indeholder T-SQL et sæt kontrol-of-flow-nøgleord, som du kan bruge til at udføre logiske test og oprette løkker, der indeholder dine T-SQL-datamanipulationssætninger. I denne lektion lærer du, hvordan du bruger nøgleordene T-SQL IF og WHILE.

Forstå T-SQL-styringen af flowsprog

SQL Server indeholder sprogelementer, der styrer flowet for programudførelse i T-SQL-batches, lagrede procedurer og brugerdefinerede funktioner med flere stater. Disse control-of-flow-elementer betyder, at du ved hjælp af programmering kan afgøre, om sætninger skal udføres, og at rækkefølgen af de sætninger, der skal udføres, skal udføres programmeringsmæssigt.

Disse elementer omfatter, men er ikke begrænset til:

  • HVIS... ELSE, som udfører kode baseret på et boolesk udtryk.
  • WHILE, som opretter en løkke, der udføres, forudsat at en betingelse er sand.
  • BEGYNDE... END, som definerer en række T-SQL-sætninger, der skal udføres sammen.
  • Andre nøgleord, f.eks. BREAK, CONTINUE, WAITFOR og RETURN, som bruges til at understøtte T-SQL control-of-flow-handlinger.

Her er et eksempel på IF-sætningen:

IF OBJECT_ID('dbo.tl') IS NOT NULL
    DROP TABLE dbo.tl
GO

Brug betinget logik i dine programmer ved hjælp af IF... ELLERS

The IF... ELSE-strukturen bruges i T-SQL til betinget udførelse af en kodeblok baseret på et prædikat. IF-sætningen bestemmer, om følgende sætning eller blok (hvis BEGIN... END bruges) udføres. Hvis prædikatet evalueres til TRUE, udføres koden i blokken. Når prædikatet evalueres til FALSE eller UNKNOWN, udføres blokken ikke, medmindre det valgfri ELSE-nøgleord bruges til at identificere en anden kodeblok.

I følgende IF-sætning spørger vi databasen, om OBJECT_ID ER NULL, og hvis det er tilfældet, returneres PRINT-sætningen. I dette eksempel er objektet IKKE null og derfor FALSE, hvilket betyder, at KODEN BEGIN/END ikke udføres. PRINT-sætningen udføres kun, hvis objektet ikke findes i databasen.

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;

På grund af begrænsningerne i ovenstående kode med kun en IF-sætning kan det være forvirrende. Hvis du kombinerer IF og ELSE, får du større fleksibilitet med logikken i din kode, og du kan bruge flere ELSE-sætninger. Med brugen af ELSE har du en anden udførelsesindstilling, når prædikatet IF evalueres til FALSE eller UNKNOWN, som i følgende eksempel:

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;

I forbindelse med datamanipulationshandlinger kan brug af IF med nøgleordet EXISTS være et nyttigt værktøj til effektiv kontrol af eksistenser som i følgende eksempel:

IF EXISTS (SELECT * FROM Sales.EmpOrders WHERE empid =5)
BEGIN
    PRINT 'Employee has associated orders';
END;

Forstå løkker ved hjælp af WHILE-sætninger

WHILE-sætningen bruges til at udføre kode i en løkke baseret på et prædikat. På samme måde som IF-sætningen bestemmer WHILE-sætningen, om følgende sætning eller blok (hvis BEGIN... END bruges) udføres. Løkken fortsætter med at køre, så længe betingelsen evalueres til SAND. Du styrer typisk løkken med en variabel, der testes af prædikatet og manipuleres i selve løkkens brødtekst.

I følgende eksempel bruges variablen @empid i prædikatet, og dens værdi ændres i BEGIN... Slutblok:

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;

Hvis du vil have flere indstillinger i en WHILE-løkke, kan du bruge nøgleordene CONTINUE og BREAK til at styre flowet.