Dela via


ELSE (OM... ELSE) (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalysplattformssystem (PDW)SQL-analysslutpunkt i Microsoft FabricLager i Microsoft FabricSQL-databas i Förhandsversion av Microsoft Fabric

Inför villkor för körning av en Transact-SQL-instruktion. Transact-SQL-instruktionen (sql_statement) efter boolean_expression körs om boolean_expression utvärderas till TRUE. Det valfria ELSE nyckelordet är en alternativ Transact-SQL-instruktion som körs när boolean_expression utvärderas till FALSE eller NULL.

Transact-SQL syntaxkonventioner

Syntax

IF boolean_expression
    { sql_statement | statement_block }
[ ELSE
    { sql_statement | statement_block } ]

Arguments

boolean_expression

Ett uttryck som returnerar TRUE eller FALSE. Om boolean_expression innehåller en SELECT -instruktion måste -instruktionen SELECT omges av parenteser.

{ sql_statement | statement_block }

Alla giltiga Transact-SQL-instruktion eller -instruktionsgruppering enligt definitionen med ett instruktionsblock. Om du vill definiera ett instruktionsblock (batch) använder du nyckelorden BEGIN control-of-flow-språk och END. Även om alla Transact-SQL-instruktioner är giltiga inom ett BEGIN...END block bör vissa Transact-SQL-instruktioner inte grupperas tillsammans inom samma batch (instruktionsblock).

Return types

Boolean

Examples

Kodexemplen i den här artikeln använder AdventureWorks2022- eller AdventureWorksDW2022-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.

A. Använda ett booleskt uttryck

I följande exempel finns ett booleskt uttryck (1 = 1) som är sant och därför skriver ut den första instruktionen.

IF 1 = 1 PRINT 'Boolean expression is true.'
ELSE PRINT 'Boolean expression is false.';

I följande exempel finns ett booleskt uttryck (1 = 2) som är falskt och skriver därför ut den andra instruktionen.

IF 1 = 2 PRINT 'Boolean expression is true.'
ELSE PRINT 'Boolean expression is false.';
GO

B. Använda en fråga som en del av ett booleskt uttryck

I följande exempel körs en fråga som en del av det booleska uttrycket. Eftersom det finns 10 cyklar i Product tabellen som uppfyller villkoret WHERE i -satsen körs den första utskriftsinstruktionen. Du kan ändra > 5 till > 15för att se hur den andra delen av -instruktionen kan köras.

USE AdventureWorks2022;
GO

IF (SELECT COUNT(*)
    FROM Production.Product
    WHERE Name LIKE 'Touring-3000%'
) > 5
    PRINT 'There are more than 5 Touring-3000 bicycles.'
ELSE
    PRINT 'There are 5 or less Touring-3000 bicycles.';
GO

C. Använda ett instruktionsblock

I följande exempel körs en fråga som en del av det booleska uttrycket och kör sedan något olika instruktionsblock baserat på resultatet av det booleska uttrycket. Varje instruktionsblock börjar med BEGIN och slutförs med END.

USE AdventureWorks2022;
GO

DECLARE @AvgWeight DECIMAL(8, 2),
    @BikeCount INT

IF (
    SELECT COUNT(*)
    FROM Production.Product
    WHERE Name LIKE 'Touring-3000%'
) > 5
BEGIN
    SET @BikeCount = (
            SELECT COUNT(*)
            FROM Production.Product
            WHERE Name LIKE 'Touring-3000%'
    );
    SET @AvgWeight = (
            SELECT AVG(Weight)
            FROM Production.Product
            WHERE Name LIKE 'Touring-3000%'
    );

    PRINT 'There are ' + CAST(@BikeCount AS VARCHAR(3)) + ' Touring-3000 bikes.'
    PRINT 'The average weight of the top 5 Touring-3000 bikes is ' + CAST(@AvgWeight AS VARCHAR(8)) + '.';
END
ELSE
BEGIN
    SET @AvgWeight = (
            SELECT AVG(Weight)
            FROM Production.Product
            WHERE Name LIKE 'Touring-3000%'
    );

    PRINT 'Average weight of the Touring-3000 bikes is ' + CAST(@AvgWeight AS VARCHAR(8)) + '.';
END;
GO

D. Använd kapslad IF... ELSE-instruktioner

I följande exempel visas hur en IF...ELSE instruktion kan kapslas i en annan. Ange variabeln @Number till 5, 50och 500, för att testa varje instruktion.

DECLARE @Number INT;
SET @Number = 50;

IF @Number > 100
    PRINT 'The number is large.';
ELSE
BEGIN
    IF @Number < 10
        PRINT 'The number is small.';
    ELSE
        PRINT 'The number is medium.';
END;
GO

Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)

E: Använda en fråga som en del av ett booleskt uttryck

I följande exempel används IF...ELSE för att avgöra vilket av två svar som ska visas för användaren, baserat på vikten för ett objekt i DimProduct tabellen i AdventureWorksDW2012 databasen.

DECLARE @maxWeight FLOAT, @productKey INT;

SET @maxWeight = 100.00;
SET @productKey = 424;

IF @maxWeight <= (
    SELECT [Weight]
    FROM DimProduct
    WHERE ProductKey = @productKey;
)
BEGIN
    SELECT @productKey,
        EnglishDescription,
        [Weight],
        'This product is too heavy to ship and is only available for pickup.'
    FROM DimProduct
    WHERE ProductKey = @productKey;
END
ELSE
BEGIN
    SELECT @productKey,
        EnglishDescription,
        [Weight],
        'This product is available for shipping or pickup.'
    FROM DimProduct
    WHERE ProductKey = @productKey;
END