Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:SQL Server
Database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Piattaforma di analisi (PDW)
Endpoint di analisi SQL in Microsoft Fabric
Magazzino in Microsoft Fabric
Database SQL in Microsoft Fabric
Imposta una condizione per l'esecuzione ripetuta di un'istruzione SQL o di un blocco di istruzioni. Le istruzioni vengono eseguite ripetutamente per tutto il tempo in cui la condizione specificata risulta vera. L'esecuzione di istruzioni nel WHILE ciclo può essere controllata dall'interno del ciclo con le BREAK parole chiave e CONTINUE .
Convenzioni relative alla sintassi Transact-SQL
Syntax
Sintassi per SQL Server, database SQL di Azure, Istanza gestita di SQL di Azure e Microsoft Fabric.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Sintassi per Azure Synapse Analytics and Analytics Platform System (PDW).
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
Arguments
boolean_expression
Espressione che restituisce TRUE o FALSE. Se l'espressione booleana contiene un'istruzione SELECT , l'istruzione SELECT deve essere racchiusa tra parentesi.
{ sql_statement | statement_block }
Qualsiasi istruzione Transact-SQL o raggruppamento di istruzioni come definito con un blocco di istruzioni. Per definire un blocco di istruzioni, usare le parole chiave BEGIN control-of-flow e END.
BREAK
Determina un'uscita dal ciclo più WHILE interno. Vengono eseguite tutte le istruzioni visualizzate dopo la END parola chiave, che contrassegna la fine del ciclo.
CONTINUE
Riavvia un WHILE ciclo. Qualsiasi istruzione dopo che la CONTINUE parola chiave viene ignorata.
CONTINUE è spesso, ma non sempre, aperto da un IF test. Per altre informazioni, vedere Controllo del flusso.
Remarks
Se due o più WHILE cicli sono annidati, l'interno BREAK esce dal ciclo più esterno successivo. Vengono eseguite tutte le istruzioni successive al ciclo più interno, quindi viene riavviato il ciclo successivo più esterno.
Examples
Gli esempi di codice in questo articolo usano il database di esempio AdventureWorks2025 o AdventureWorksDW2025, che è possibile scaricare dalla home page Microsoft SQL Server Samples and Community Projects.
A. Usare BREAK e CONTINUE con IF annidato... ELSE e WHILE
Nell'esempio seguente, se il prezzo medio di listino di un prodotto è minore di $300, il WHILE ciclo raddoppia i prezzi e quindi seleziona il prezzo massimo. Se il prezzo massimo è minore o uguale a $500, il WHILE ciclo viene riavviato e raddoppia di nuovo i prezzi. Questo ciclo continua a raddoppiare i prezzi fino a quando il prezzo massimo è maggiore di $ 500, quindi esce dal WHILE ciclo e stampa un messaggio.
USE AdventureWorks2022;
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. Usare WHILE in un cursore
Nell'esempio seguente viene utilizzata la funzione @@FETCH_STATUS per controllare le attività del cursore in un ciclo WHILE.
DECLARE @EmployeeID AS NVARCHAR(256)
DECLARE @Title AS NVARCHAR(50)
DECLARE Employee_Cursor CURSOR
FOR
SELECT LoginID, JobTitle
FROM AdventureWorks2022.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT
FROM Employee_Cursor
INTO @EmployeeID, @Title;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT ' ' + @EmployeeID + ' ' + @Title
FETCH NEXT
FROM Employee_Cursor
INTO @EmployeeID, @Title;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)
C. Loop WHILE
Nell'esempio seguente, se il prezzo medio di listino di un prodotto è minore di $300, il WHILE ciclo raddoppia i prezzi e quindi seleziona il prezzo massimo. Se il prezzo massimo è minore o uguale a $500, il WHILE ciclo viene riavviato e raddoppia di nuovo i prezzi. Questo ciclo continua a raddoppiare i prezzi fino a quando il prezzo massimo è maggiore di $ 500 e quindi esce dal WHILE ciclo.
WHILE (
SELECT AVG(ListPrice)
FROM dbo.DimProduct
) < $300
BEGIN
UPDATE dbo.DimProduct
SET ListPrice = ListPrice * 2;
SELECT MAX(ListPrice)
FROM dbo.DimProduct
IF (
SELECT MAX(ListPrice)
FROM dbo.DimProduct
) > $500
BREAK;
END