WHILE (Transact-SQL)

Bir SQL deyiminin veya deyim bloğunun tekrar tekrar çalıştırılması için bir koşul koyar. Deyimler, belirtilen koşul doğru olduğu sürece tekrar tekrar çalıştırılır. WHILE döngüsündeki deyimlerin çalıştırılması döngü içinden BREAK ve CONTINUE anahtar sözcükleri ile denetlenebilir.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

WHILE Boolean_expression 
     { sql_statement | statement_block | BREAK | CONTINUE } 

Bağımsız değişkenler

  • Boolean_expression
    TRUE veya FALSE döndüren bir ifadedir. Boolean ifade bir SELECT deyimi içeriyorsa, SELECT deyiminin parantez içine alınması gerekir.

  • {sql_statement | statement_block}
    Bir deyim bloğu ile tanımlanan herhangi bir Transact-SQL deyimi veya deyim grubudur. Bir deyim bloğu tanımlamak için, BEGIN ve END denetim akışı anahtar sözcüklerini kullanın.

  • BREAK
    En içteki WHILE döngüsünden çıkılmasına neden olur. Döngünün sonuna işaret eden END anahtar sözcüğünden sonra gelen deyimler çalıştırılır.

  • CONTINUE
    WHILE döngüsüne yeniden başlanılmasına, CONTINUE anahtar sözcüğünden sonra gelen deyimlerin göz ardı edilmesine neden olur.

Açıklamalar

İki veya daha fazla WHILE döngüsü iç içeyse, içteki BREAK bir sonraki döngüye çıkar. Önce içteki döngünün sonundan sonra gelen tüm deyimler çalıştırılır, sonra en dıştaki döngü yeniden başlar.

Örnekler

A.BREAK veya CONTINUE sözcüklerini iç içe IF...ELSE ve WHILE ile kullanma

Aşağıdaki örnekte bir ürünün ortalama liste fiyatı $300 rakamından düşükse, WHILE döngüsü fiyatları ikiye katlayıp sonra en yüksek fiyatı seçmektedir. En yüksek fiyat $500 rakamından düşük veya bu rakama eşitse, WHILE döngüsü yeniden başlayıp fiyatları tekrar ikiye katlamaktadır. Bu döngü en yüksek fiyat $500 rakamından büyük oluncaya kadar fiyatları iki katlamayı sürdürmekte, sonra WHILE döngüsünden çıkıp ekrana bir ileti yazmaktadır.

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.WHILE sözcüğünü bir imleçte kullanma

Aşağıdaki örnek bir WHILE döngüsündeki imleç etkinliklerini denetlemek için @@FETCH_STATUS kullanmaktadır.

DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title 
FROM AdventureWorks2012.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO

DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title 
FROM AdventureWorks2012.HumanResources.Employee
WHERE JobTitle = 'Marketing Specialist';
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
   BEGIN
      FETCH NEXT FROM Employee_Cursor;
   END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO

Ayrıca bkz.

Başvuru

alter TETIKLEYICI (Transact-sql)

Akış denetimi dil (Transact-sql)

CREATE TRIGGER (Transact-SQL)

Imleçler (Transact-sql)

select (Transact-sql)