SEMENTARA (T-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse 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
.
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