WHILE (Transact-SQL)
更新 : 2006 年 4 月 14 日
SQL ステートメントまたはステートメント ブロックの実行を繰り返すための条件を設定します。指定した条件が満たされている限り、ステートメントは繰り返し実行されます。WHILE ループ内のステートメントの実行は、ループ内から BREAK キーワードおよび CONTINUE キーワードによって制御することができます。
構文
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 の使用
ヘルプおよび情報
変更履歴
リリース | 履歴 |
---|---|
2006 年 4 月 14 日 |
|