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.
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)