Share via


WHILE...BREAK または CONTINUE の使用

WHILE ステートメントでは、指定された条件が TRUE の間、ステートメントやステートメント ブロックが繰り返し実行されます。

BREAK または CONTINUE の 2 つの Transact-SQL ステートメントは、通常 WHILE と共に使用されます。BREAK ステートメントでは、最も内側の WHILE ループが終了します。CONTINUE ステートメントでは WHILE ループが再開されます。たとえば、他に処理対象の行がない場合、プログラムで BREAK ステートメントを実行します。他のコードの実行を続ける必要がある場合は、CONTINUE ステートメントを実行します。

注意

SELECT ステートメントを WHILE ステートメントの条件として使用する場合は、SELECT ステートメントをかっこで囲む必要があります。

A. カーソルで WHILE を使用する

次の例では、行われるフェッチの数を制御する WHILE ステートメントが使用されています。

USE AdventureWorks2008R2;
GO
DECLARE abc CURSOR FOR
SELECT * FROM Purchasing.ShipMethod;
OPEN abc;
FETCH NEXT FROM abc
WHILE (@@FETCH_STATUS = 0)
   FETCH NEXT FROM abc;
CLOSE abc;
DEALLOCATE abc;
GO

WHILE では他に、次のような条件評価も使用できます。

WHILE (@ACounterVariable < 100)

または

WHILE EXISTS(SELECT LastName FROM Person.Person WHERE FirstName = N'Anne')

B. BREAK と CONTINUE を、入れ子にされた IF...ELSE および WHILE と組み合わせて使用する

次の例では、製品の平均表示価格が $300 を下回る場合、WHILE ループが価格を倍にして、最高価格を選択します。最高価格が $500 以下の場合は、WHILE ループが再開し、再び価格を倍にします。このループは、最高価格が $500 を超えるまで価格を倍増し続け、その後 WHILE ループから抜け出してメッセージを出力します。

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';