Aracılığıyla paylaş


WHILE (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

SQL deyiminin veya deyim bloğunun tekrarlanan yürütülmesi için bir koşul ayarlar. Belirtilen koşul true olduğu sürece deyimler tekrar tekrar yürütülür. Döngüdeki WHILE deyimlerin yürütülmesi, ve BREAK anahtar sözcükleriyle CONTINUE döngünün içinden denetlenebilir.

Transact-SQL söz dizimi kuralları

Syntax

SQL Server, Azure SQL Veritabanı, Azure SQL Yönetilen Örneği ve Microsoft Fabric için söz dizimi.

WHILE boolean_expression
    { sql_statement | statement_block | BREAK | CONTINUE }

Azure Synapse Analytics ve Analytics Platform Sistemi (PDW) için söz dizimi.

WHILE boolean_expression
    { sql_statement | statement_block | BREAK }

Arguments

boolean_expression

veya döndüren TRUEFALSE. Boole ifadesi bir SELECT deyim içeriyorsa, SELECT deyimi parantez içine alınmalıdır.

{ sql_statement | statement_block }

Deyim bloğuyla tanımlandığı şekilde Transact-SQL deyim veya deyim gruplandırma. Bir deyim bloğu tanımlamak için, ve akış denetimi anahtar sözcüklerini BEGINENDkullanın.

BREAK

En WHILE içteki döngüden çıkışa neden olur. Anahtar sözcüğünden END sonra görünen ve döngünün sonunu işaretleyen tüm deyimler yürütülür.

CONTINUE

Döngü yeniden WHILE başlatılır. Anahtar sözcüğünden CONTINUE sonraki tüm deyimler yoksayılır. CONTINUE sık sık, ancak her zaman değil, bir IF test tarafından açılır. Daha fazla bilgi için bkz. Akış Denetimi.

Remarks

İki veya daha fazla WHILE döngü iç içe yerleştirilmişse, iç BREAK en dıştaki döngüye çıkar. İç döngünün sonundan sonraki tüm deyimler önce çalıştırılır ve ardından en dıştaki bir sonraki döngü yeniden başlatılır.

Examples

Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.

A. İç içe EĞER ile BREAK ve CONTINUE kullanın... ELSE ve WHILE

Aşağıdaki örnekte, bir ürünün ortalama liste fiyatı 300 TL'den düşükse döngü WHILE fiyatları ikiye katlar ve ardından en yüksek fiyatı seçer. Maksimum fiyat 500 TL'den küçük veya buna eşitse döngü WHILE yeniden başlatılır ve fiyatları yeniden ikiye katlar. Bu döngü, maksimum fiyat 500 TL'den büyük olana kadar fiyatları iki katına çıkmaya devam eder ve döngüden WHILE çıkar ve bir ileti yazdırır.

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. İmleçte WHILE kullanma

Aşağıdaki örnek, bir @@FETCH_STATUS döngüdeki imleç etkinliklerini denetlemek için kullanırWHILE.

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

Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)

C. WHILE döngüsü

Aşağıdaki örnekte, bir ürünün ortalama liste fiyatı 300 TL'den düşükse döngü WHILE fiyatları ikiye katlar ve ardından en yüksek fiyatı seçer. Maksimum fiyat 500 TL'den küçük veya buna eşitse döngü WHILE yeniden başlatılır ve fiyatları yeniden ikiye katlar. Bu döngü, maksimum fiyat 500 TL'den büyük olana kadar fiyatları iki katına çıkmaya devam eder ve ardından döngüden WHILE çıkar.

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