SQL Server で Transact-sql を使用して結果セットを反復処理する方法

この資料の内容

概要

この記事では、ストアドプロシージャ、トリガー、Transact-sql バッチで、カーソルのような FETCH の次のロジックをシミュレートするために使用できるさまざまな方法について説明します。

Transact-sql ステートメントを使用して結果セットを反復処理する

Transact-sql ステートメントを使用して結果セットを反復処理するには、次の3つの方法があります。1つの方法は、 一時 テーブルの使用です。 この方法では、最初の SELECT ステートメントの "snapshot" を作成し、"cursoring" のベースとして使用します。 次に例を示します。

/********** example 1 **********/ declare @au_id char( 11 )set rowcount 0select * into #mytemp from authorsset rowcount 1select @au_id = au_id from #mytempwhile @@rowcount <> 0begin    set rowcount 0    select * from #mytemp where au_id = @au_id    delete #mytemp where au_id = @au_id    set rowcount 1    select @au_id = au_id from #mytemp<BR/>endset rowcount 0

2つ目の方法は、 min 関数を使用して、テーブルを一度に1行ずつ "ウォークダウン" します。 このメソッドは、ストアドプロシージャの実行後に追加された新しい行をキャッチします。新しい行には、クエリで処理されている現在の行よりも大きい一意の識別子が含まれています。 次に例を示します。

/********** example 2 **********/ declare @au_id char( 11 )select @au_id = min( au_id ) from authorswhile @au_id is not nullbegin    select * from authors where au_id = @au_id    select @au_id = min( au_id ) from authors where au_id > @au_idend

注: 例1と2は、ソーステーブルの各行に一意の識別子が存在することを前提としています。 場合によっては、一意の識別子が存在しないことがあります。 その場合は、新しく作成されたキー列を使用するように temp table メソッドを変更できます。 次に例を示します。

/********** example 3 **********/ set rowcount 0select NULL mykey, * into #mytemp from authorsset rowcount 1update #mytemp set mykey = 1while @@rowcount > 0begin    set rowcount 0    select * from #mytemp where mykey = 1    delete #mytemp where mykey = 1    set rowcount 1    update #mytemp set mykey = 1endset rowcount 0

ヘルプを表示

スキルを磨く
トレーニングの探索
新機能を最初に入手
Microsoft Insider に参加する

この情報は役に立ちましたか?

フィードバックをお送りいただきありがとうございます!

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×