Aracılığıyla paylaş


WHILE (Transact-SQL)

Bir SQL deyim veya deyim blokyinelenen yürütülmesi için bir koşul olarak ayarlar.Koşul doğru olduğu sürece ifadeleri art arda çalıştırılır.WHILE döngüsünde ifadeleri yürütülmesini gelen break ve CONTINUE sözcüklerle döngü içinde kontrol edilebilir.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

WHILE Boolean_expression 
     { sql_statement | statement_block | BREAK | CONTINUE } 

Bağımsız değişkenler

  • Boolean_expression
    Olan bir ifade dönen TRUE veya FALSE.Booleifade , bir select deyimiçeriyorsa, select deyim parantez içine alınmalıdır.

  • {sql_statement | statement_block}
    Herhangi Transact-SQLdeyim veya bir deyimblokile tanımlandığı gibi deyimgruplandırma . Bir deyim bloktanımlamak için başlangıç ve BİTİŞ akış denetimi anahtar sözcükler kullanın.

  • SONU
    Nedenleri çıkış en içteki WHILE'bir döngü.Döngünün sonuna işaretleme BİTİŞ anahtar sonra görünen deyimleri çalıştırılır.

  • DEVAM
    WHILE döngüsü, yeniden başlatmanız, sonra devam anahtar sözcüğü herhangi deyimleri yoksayılıyor neden olur.

Açıklamalar

İki veya daha fazla için döngü yuvalanmış İKEN, sonraki en dıştaki döngü için iç sonu çıkar.İç döngü sonunda tüm ifadeleri ilk çalıştırma ve sonraki en dıştaki döngü yeniden başlar.

Örnekler

A.break ve CONTINUE IF kullanarak...else ve sırasında

Aşağıdaki örnekte, ortalama fiyat listesi ürün ise daha az $300, WHILE döngü fiyatları iki katına çıkarır ve sonra seçer en yüksek fiyat.Maksimum fiyat küçük veya eşit olup olmadığını $500, WHILE döngü yeniden başlar ve fiyatların yeniden ikiye katlanır.Fiyatları en yüksek fiyat değerden büyük oluncaya kadar Katlama Bu döngü devam $500ve sonra çıkar WHILE döngü ve yazdırır ileti.

USE AdventureWorks2008R2;
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.Bir imleçİKEN kullanma

Aşağıdaki örnek @@FETCH_STATUS Denetim imleç faaliyetleri için bir WHILE döngü.

DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title 
FROM AdventureWorks2008R2.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