ELSE (IF...ELSE) (Transact-SQL)ELSE (IF...ELSE) (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A: SìSQL Server (a partire da 2008)SìDatabase SQL di AzureSìAzure SQL Data Warehouse Sì Parallel Data Warehouse THIS TOPIC APPLIES TO: yesSQL Server (starting with 2008)yesAzure SQL DatabaseyesAzure SQL Data Warehouse yesParallel Data Warehouse

Impone le condizioni per l'esecuzione di un'istruzione Transact-SQLTransact-SQL.Imposes conditions on the execution of a Transact-SQLTransact-SQL statement. L'istruzione Transact-SQLTransact-SQL (sql_statement) che segue Boolean_expression viene eseguita se Boolean_expression restituisce TRUE.The Transact-SQLTransact-SQL statement (sql_statement) following the Boolean_expressionis executed if the Boolean_expression evaluates to TRUE. La parola chiave facoltativa ELSE rappresenta un'istruzione Transact-SQLTransact-SQL alternativa che viene eseguita quando l'argomento Boolean_expression restituisce FALSE o NULL.The optional ELSE keyword is an alternate Transact-SQLTransact-SQL statement that is executed when Boolean_expression evaluates to FALSE or NULL.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax

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

ArgomentiArguments

Boolean_expressionBoolean_expression
Espressione che restituisce TRUE o FALSE.Is an expression that returns TRUE or FALSE. Se Boolean_expression contiene un'istruzione SELECT, tale istruzione deve essere racchiusa tra parentesi.If the Boolean_expression contains a SELECT statement, the SELECT statement must be enclosed in parentheses.

{ sql_statement | statement_block }{ sql_statement | statement_block }
Qualsiasi istruzione o gruppo di istruzioni Transact-SQLTransact-SQL valido definito con un blocco di istruzioni.Is any valid Transact-SQLTransact-SQL statement or statement grouping as defined with a statement block. Per definire un blocco di istruzioni (batch), utilizzare le parole chiave del linguaggio per il controllo di flusso BEGIN ed END.To define a statement block (batch), use the control-of-flow language keywords BEGIN and END. Sebbene tutte le istruzioni Transact-SQLTransact-SQL siano valide nell'ambito di un blocco BEGIN...END, alcune istruzioni Transact-SQLTransact-SQL non devono essere raggruppate nello stesso batch (blocco di istruzioni).Although all Transact-SQLTransact-SQL statements are valid within a BEGIN...END block, certain Transact-SQLTransact-SQL statements should not be grouped together within the same batch (statement block).

Tipi restituitiResult Types

BooleanBoolean

EsempiExamples

A.A. Esecuzione di un'espressione booleanaUsing a simple Boolean expression

Nell'esempio seguente è presente un'espressione booleana semplice (1=1) con valore true e di conseguenza viene stampata la prima istruzione.The following example has a simple Boolean expression (1=1) that is true and, therefore, prints the first statement.

IF 1 = 1 PRINT 'Boolean_expression is true.'  
ELSE PRINT 'Boolean_expression is false.' ;  

Nell'esempio seguente è presente un'espressione booleana semplice (1=2) con valore false e di conseguenza viene stampata la seconda istruzione.The following example has a simple Boolean expression (1=2) that is false, and therefore prints the second statement.

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

B.B. Utilizzo di una query come parte di un'espressione booleanaUsing a query as part of a Boolean expression

Nell'esempio seguente viene eseguita una query come parte dell'espressione booleana.The following example executes a query as part of the Boolean expression. Poiché nella tabella Product sono presenti 10 biciclette che soddisfano la clausola WHERE, verrà eseguita la prima istruzione di stampa.Because there are 10 bikes in the Product table that meet the WHERE clause, the first print statement will execute. Modificare > 5 in > 15 per ottenere il modo in cui potrebbe essere eseguita la seconda parte dell'istruzione.Change > 5 to > 15 to see how the second part of the statement could execute.

USE AdventureWorks2012;  
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.C. Utilizzo di un blocco di istruzioniUsing a statement block

Nell'esempio seguente viene eseguita una query come parte dell'espressione booleana e successivamente vengono eseguiti blocchi di istruzioni leggermente diversi in base al risultato dell'espressione booleana.The following example executes a query as part of the Boolean expression and then executes slightly different statement blocks based on the result of the Boolean expression. Ogni blocco di istruzioni inizia con BEGIN e termina con END.Each statement block starts with BEGIN and completes with END.

USE AdventureWorks2012;  
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.D. Utilizzo di istruzioni IF...ELSE nidificateUsing nested IF...ELSE statements

L'esempio seguente mostra come è possibile annidare più istruzioni IF ...The following example shows how an IF … ELSE.ELSE statement can be nested inside another. Impostare la variabile @Number su 5, 50 e 500 per eseguire il test di ogni istruzione.Set the @Number variable to 5, 50, and 500 to test each statement.

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  

Esempi: Azure SQL Data WarehouseAzure SQL Data Warehouse e Parallel Data WarehouseParallel Data WarehouseExamples: Azure SQL Data WarehouseAzure SQL Data Warehouse and Parallel Data WarehouseParallel Data Warehouse

B. Uso di una query come parte di un'espressione booleanaE: Using a query as part of a Boolean expression

L'esempio seguente usa IF…ELSE per determinare quale delle due risposte visualizzare all'utente, in base al peso di un elemento nella tabella DimProduct.The following example uses IF…ELSE to determine which of two responses to show the user, based on the weight of an item in the DimProduct table.

-- Uses AdventureWorks  

DECLARE @maxWeight float, @productKey integer  
SET @maxWeight = 100.00  
SET @productKey = 424  
IF @maxWeight <= (SELECT Weight from DimProduct WHERE ProductKey=@productKey)   
    (SELECT @productKey, EnglishDescription, Weight, 'This product is too heavy to ship and is only available for pickup.' FROM DimProduct WHERE ProductKey=@productKey)  
ELSE  
    (SELECT @productKey, EnglishDescription, Weight, 'This product is available for shipping or pickup.' FROM DimProduct WHERE ProductKey=@productKey)  

Vedere ancheSee Also

ALTER TRIGGER (Transact-SQL) ALTER TRIGGER (Transact-SQL)
Elementi del linguaggio per il controllo di flusso (Transact-SQL) Control-of-Flow Language (Transact-SQL)
CREATE TRIGGER (Transact-SQL) CREATE TRIGGER (Transact-SQL)
IF...ELSE (Transact-SQL)IF...ELSE (Transact-SQL)