SEMENTARA (T-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse 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 kata kunci BREAK dan CONTINUE.

Konvensi sintaks transact-SQL

Sintaksis

-- Syntax for SQL Server and Azure SQL Database and Microsoft Fabric
  
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 (12.x) dan versi 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 Transact-SQL atau pengelompokan pernyataan seperti yang didefinisikan dengan blok pernyataan. Untuk menentukan blok pernyataan, gunakan kata kunci control-of-flow BEGIN dan END.

BREAK
Menyebabkan jalan keluar dari perulangan WHILE paling 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 LANJUTKAN.

Keterangan

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

Contoh

J. Menggunakan 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 , dan kemudian keluar dari $500perulangan WHILE 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: Sederhana Sementara Perulangan

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

UBAH PEMICU (Transact-SQL)
Bahasa Kontrol Aliran (Transact-SQL)
BUAT PEMICU (Transact-SQL)
Kursor (Transact-SQL)
SELECT (Transact-SQL)