WHILE (Transact-SQL)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
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 kata kunci BREAK dan CONTINUE.
Sintaks
-- Syntax for SQL Server and Azure SQL Database
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK | CONTINUE }
-- Syntax for Azure Azure Synapse Analytics and Parallel Data Warehouse
WHILE Boolean_expression
{ sql_statement | statement_block | BREAK }
Catatan
Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
Boolean_expression
Adalah ekspresi yang mengembalikan TRUE atau FALSE. Jika ekspresi Boolean berisi pernyataan SELECT, pernyataan SELECT harus diapit dalam tanda kurung.
{sql_statement | statement_block}
Adalah pernyataan atau pengelompokan pernyataan transact-SQL seperti yang didefinisikan dengan blok pernyataan. Untuk menentukan blok pernyataan, gunakan kata kunci control-of-flow BEGIN dan END.
BREAK
Menyebabkan keluar dari perulangan WHILE terda dalam. Setiap pernyataan yang muncul setelah kata kunci END, menandai akhir perulangan, dijalankan.
LANJUTKAN
Menyebabkan perulangan WHILE dimulai ulang, mengabaikan pernyataan apa pun setelah kata kunci CONTINUE.
Keterangan
Jika dua atau lebih perulangan WHILE ditumpuk, BREAK dalam keluar ke perulangan terluar berikutnya. Semua pernyataan setelah akhir perulangan dalam berjalan terlebih dahulu, dan kemudian perulangan terluar berikutnya dimulai ulang.
Contoh
A. Menggunakan BREAK dan CONTINUE 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 , dan kemudian keluar dari $500perulangan WHILE dan mencetak pesan.
USE AdventureWorks2012;
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 AdventureWorks2012.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: Sederhana Saat Loop
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 .
-- Uses AdventureWorks
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
Lihat juga
ALTER TRIGGER (Transact-SQL)
Bahasa Kontrol Flow (SQL Transact)
CREATE TRIGGER (Transact-SQL)
Kursor (SQL Bertransaksi)
SELECT (Transact-SQL)
