WHILE (Transact-SQL)
Data aggiornamento: 14 aprile 2006
Imposta una condizione per l'esecuzione ripetuta di un'istruzione o di un blocco di istruzioni di SQL. Le istruzioni vengono eseguite ripetutamente per tutto il tempo in cui la condizione specificata risulta vera. È possibile controllare l'esecuzione di istruzioni nel ciclo WHILE dall'interno del ciclo tramite le parole chiave BREAK e CONTINUE.
Convenzioni della sintassi Transact-SQL
Sintassi
WHILE Boolean_expression
{ sql_statement | statement_block }
[ BREAK ]
{ sql_statement | statement_block }
[ CONTINUE ]
{ sql_statement | statement_block }
Argomenti
- Boolean_expression
Espressione che restituisce TRUE o FALSE. Se l'espressione booleana include un'istruzione SELECT, tale istruzione deve essere racchiusa tra parentesi.
- {sql_statement | statement_block}
Qualsiasi istruzione o serie di istruzioni Transact-SQL valide definite con un blocco di istruzioni. Per definire un blocco di istruzioni, utilizzare le parole chiave per il controllo di flusso BEGIN ed END.
- BREAK
Consente di uscire dal ciclo WHILE più interno. Vengono eseguite le istruzioni che si trovano dopo la parola chiave END, che segna la fine del ciclo.
- CONTINUE
Consente il riavvio del ciclo WHILE, ignorando tutte le istruzioni che seguono la parola chiave CONTINUE.
Osservazioni
Se sono presenti due o più cicli WHILE nidificati, un'istruzione BREAK nel ciclo più interno passa al ciclo più esterno successivo. Vengono eseguite tutte le istruzioni che si trovano dopo la fine del ciclo più interno, quindi viene riavviato il ciclo successivo più esterno.
Esempi
A. Utilizzo di BREAK e CONTINUE con cicli IF...ELSE e WHILE nidificati
Nell'esempio seguente, se il prezzo medio di listino di un prodotto è minore di $300
, il ciclo WHILE
raddoppia i prezzi e quindi seleziona il prezzo massimo. Se il prezzo massimo è minore o uguale a $500
, il ciclo WHILE
viene riavviato e il prezzo viene nuovamente raddoppiato. Questo ciclo continua a raddoppiare i prezzi fino a quando il prezzo massimo non supera $500
, quindi il ciclo WHILE
viene terminato e viene stampato un messaggio.
USE AdventureWorks;
GO
WHILE (SELECT AVG(ListPrice) FROM Production.Product) < $300
BEGIN
UPDATE Production.Product
SET ListPrice = ListPrice * 2
SELECT MAX(ListPrice) FROM Production.Product
IF (SELECT MAX(ListPrice) FROM Production.Product) > $500
BREAK
ELSE
CONTINUE
END
PRINT 'Too much for the market to bear';
B. Utilizzo di WHILE in un cursore
Nell'esempio seguente viene utilizzata la funzione @@FETCH_STATUS
per controllare le attività del cursore in un ciclo WHILE
.
DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID =3;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
Vedere anche
Riferimento
ALTER TRIGGER (Transact-SQL)
Elementi del linguaggio per il controllo di flusso (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
Cursori (Transact-SQL)
SELECT (Transact-SQL)
Altre risorse
Utilizzo di WHILE...BREAK o CONTINUE
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
14 aprile 2006 |
|