Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database 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 .
Syntax
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 }
Arguments
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.
CONTINUE
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.
Remarks
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.
Examples
Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.
A. 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. Lingkaran 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 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