Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Nastaví podmínku pro opakované spuštění příkazu nebo bloku příkazu SQL. Příkazy se provádějí opakovaně, pokud je zadaná podmínka pravdivá. Spuštění příkazů ve WHILE smyčce lze ovládat ze smyčky pomocí BREAK klíčových slov a CONTINUE z této smyčky.
Syntax
Syntaxe pro SQL Server, Azure SQL Database, Azure SQL Managed Instance a Microsoft Fabric.
WHILE boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
Syntaxe pro Azure Synapse Analytics a Platform Platform System (PDW).
WHILE boolean_expression
{ sql_statement | statement_block | BREAK }
Arguments
boolean_expression
Výraz, který vrací TRUE nebo FALSE. Pokud logický výraz obsahuje SELECT příkaz, SELECT musí být příkaz uzavřený v závorkách.
{ sql_statement | statement_block }
Všechny Transact-SQL příkazy nebo seskupení příkazů definované pomocí bloku příkazu. K definování bloku příkazu použijte klíčová slova BEGIN control-of-flow a END.
BREAK
Způsobí ukončení z vnitřní WHILE smyčky. Všechny příkazy, které se zobrazí za END klíčovým slovem a označují konec smyčky, se spustí.
CONTINUE
Restartuje smyčku WHILE . Všechny příkazy za klíčovým slovem CONTINUE se ignorují.
CONTINUE je často, ale ne vždy otevřen testem IF . Další informace najdete v tématu Řízení toku.
Remarks
Pokud jsou vnořené dvě nebo více WHILE smyček, vnitřní BREAK ukončí další vnější smyčku. Nejprve se spustí všechny příkazy za koncem vnitřní smyčky a pak se restartuje další vnější smyčka.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použití funkce BREAK a CONTINUE s vnořenou chybou KDYŽ... ELSE a WHILE
Pokud je průměrná ceníková cena produktu nižší než 300 Kč, WHILE smyčka v následujícím příkladu zdvojnásobí ceny a pak vybere maximální cenu. Pokud je maximální cena menší nebo rovna 500 USD, WHILE smyčka se restartuje a znovu zdvojnásobí ceny. Tato smyčka pokračuje ve zdvojnásobení cen, dokud maximální cena není větší než 500 USD, a pak ukončí smyčku WHILE a vytiskne zprávu.
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. Použití funkce WHILE v kurzoru
Následující příklad používá @@FETCH_STATUS k řízení aktivit kurzoru ve smyčce 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
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
C. WHILE smyčka
Pokud je průměrná ceníková cena produktu nižší než 300 Kč, WHILE smyčka v následujícím příkladu zdvojnásobí ceny a pak vybere maximální cenu. Pokud je maximální cena menší nebo rovna 500 USD, WHILE smyčka se restartuje a znovu zdvojnásobí ceny. Tato smyčka pokračuje ve zdvojnásobení cen, dokud maximální cena není vyšší než 500 USD, a poté ukončí smyčku WHILE .
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
Související obsah
- ALTEROVÁ SPOUŠŤ (Transact-SQL)
- Řízení toku
- VYTVOŘIT SPOUŠŤ (Transact-SQL)
- Kurzory (Transact-SQL)
- SELECT (Transact-SQL)