WHILE (Transact-SQL)

更新 : 2006 年 4 月 14 日

SQL ステートメントまたはステートメント ブロックの実行を繰り返すための条件を設定します。指定した条件が満たされている限り、ステートメントは繰り返し実行されます。WHILE ループ内のステートメントの実行は、ループ内から BREAK キーワードおよび CONTINUE キーワードによって制御することができます。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

WHILE Boolean_expression 
     { sql_statement | statement_block } 
     [ BREAK ] 
     { sql_statement | statement_block } 
     [ CONTINUE ] 
     { sql_statement | statement_block } 

引数

  • Boolean_expression
    TRUE または FALSE を返すです。ブール式が SELECT ステートメントを含む場合は、SELECT ステートメントをかっこで囲む必要があります。
  • {sql_statement | statement_block}
    1 つの Transact-SQL ステートメント、またはステートメント ブロックとして定義した一連のステートメントです。ステートメント ブロックを定義するには、流れ制御キーワードの BEGIN と END を使用してください。
  • BREAK
    最も内側の WHILE ループから抜けます。ループの終了位置を示す END キーワード以降のすべてのステートメントが実行されます。
  • CONTINUE
    CONTINUE キーワード以降のすべてのステートメントを無視し、WHILE ループを再開します。

解説

2 つ以上の WHILE ループを入れ子にする場合、内側の BREAK が終了すると、1 つ外側のループに出ます。まず、この内側ループの終了の後にあるステートメントがすべて実行され、次にこの外側のループの実行が再開されます。

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

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

USE AdventureWorks;
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 を使用する

次の例では、@@FETCH_STATUS を使用して WHILE ループ内のカーソルの動作を制御します。

DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title 
FROM AdventureWorks.HumanResources.Employee
WHERE ManagerID =3;
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

参照

関連項目

ALTER TRIGGER (Transact-SQL)
流れ制御言語 (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
カーソル (Transact-SQL)
SELECT (Transact-SQL)

その他の技術情報

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

ヘルプおよび情報

SQL Server 2005 の参考資料の入手

変更履歴

リリース 履歴

2006 年 4 月 14 日

新しい内容 :
  • 例 B を置換。