Bagikan melalui


SEMENTARA (T-SQL)

Berlaku untuk: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) titik akhir analitik SQL di Microsoft Fabric Warehouse dalam database Microsoft Fabric SQL di Microsoft Fabric

Mengatur kondisi untuk eksekusi berulang dari pernyataan SQL atau blok pernyataan. Pernyataan dijalankan berulang kali selama kondisi yang ditentukan benar. Eksekusi pernyataan dalam perulangan WHILE dapat dikontrol dari dalam perulangan dengan BREAK kata kunci dan CONTINUE .

Konvensi sintaks transact-SQL

Sintaks

Sintaks untuk SQL Server, Azure SQL Database, Azure SQL Managed Instance, dan Microsoft Fabric.

WHILE boolean_expression
    { sql_statement | statement_block | BREAK | CONTINUE }

Sintaks untuk Azure Synapse Analytics dan Analytics Platform System (PDW).

WHILE boolean_expression
    { sql_statement | statement_block | BREAK }

Argumen

boolean_expression

Ekspresi yang mengembalikan TRUE atau FALSE. Jika ekspresi Boolean berisi SELECT pernyataan, SELECT pernyataan harus diapit dalam tanda kurung.

{ sql_statement | statement_block }

Setiap pernyataan Transact-SQL atau pengelompokan pernyataan seperti yang didefinisikan dengan blok pernyataan. Untuk menentukan blok pernyataan, gunakan kata kunci BEGIN control-of-flow dan END.

BREAK

Menyebabkan jalan keluar dari perulangan paling WHILE dalam. Setiap pernyataan yang muncul setelah END kata kunci, menandai akhir perulangan, dijalankan.

LANJUTKAN

Memulai ulang perulangan WHILE . Pernyataan apa pun setelah CONTINUE kata kunci diabaikan. CONTINUE sering, tetapi tidak selalu, dibuka oleh IF tes. Untuk informasi selengkapnya, lihat Control-of-Flow.

Keterangan

Jika dua perulangan atau lebih WHILE disarangkan, bagian dalam BREAK keluar ke perulangan terluar berikutnya. Semua pernyataan setelah akhir perulangan dalam berjalan terlebih dahulu, dan kemudian perulangan terluar berikutnya dimulai ulang.

Contoh

Sampel kode Transact-SQL dalam artikel ini menggunakan AdventureWorks2022 database sampel atau AdventureWorksDW2022 , yang dapat Anda unduh dari halaman beranda Sampel Microsoft SQL Server dan Proyek Komunitas.

J. Gunakan BREAK dan LANJUTKAN dengan IF berlapis... ELSE dan WHILE

Dalam contoh berikut, jika harga daftar rata-rata produk kurang dari $ 300, perulangan WHILE menggandakan harga dan kemudian memilih harga maksimum. Jika harga maksimum kurang dari atau sama dengan $500, perulangan WHILE dimulai ulang dan menggandakan harga lagi. Perulangan ini terus menggandakan harga sampai harga maksimum lebih besar dari $ 500, dan kemudian keluar dari WHILE perulangan dan mencetak pesan.

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. Menggunakan WHILE dalam kursor

Contoh berikut menggunakan @@FETCH_STATUS untuk mengontrol aktivitas kursor dalam perulangan 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

Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)

C: PERULANGAN SEMENTARA

Dalam contoh berikut, jika harga daftar rata-rata produk kurang dari $ 300, perulangan WHILE menggandakan harga dan kemudian memilih harga maksimum. Jika harga maksimum kurang dari atau sama dengan $500, perulangan WHILE dimulai ulang dan menggandakan harga lagi. Perulangan ini terus menggandakan harga sampai harga maksimum lebih besar dari $ 500, dan kemudian keluar dari perulangan 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