![How Can I Execute a Stored Procedure for Each Row Returned by a T-SQL Query?](https://img.php.cn/upload/article/000/000/000/173520601617180.jpg)
T-SQL でのクエリ結果の各行のストアド プロシージャの実行
クエリの結果を反復処理してストアド プロシージャを実行するにはT-SQL では行ごとに CURSOR を使用できます。 CURSOR を使用すると、結果セットから一度に 1 行を取得できるため、このシナリオに最適です。
このループ機能を実現するには、T-SQL でのソリューションの概要を次の手順に示します。
-
必要な変数を宣言します:
a.各行の ID 値を格納する整数変数 @id を宣言します。
b.たとえば、テーブルから追加の列値を保存するには、2 番目の変数 @name を宣言します。
c.行をステップ実行するカーソルを保持する CURSOR 変数 @getid を宣言します。
-
CURSOR を作成します。
SET ステートメントを使用して @getid に値を割り当てます。 value は、テーブルから目的の列を選択する SQL ステートメントです。この例では、ID と名前の両方を選択します。
-
CURSOR を開きます:
OPEN ステートメントを使用して CURSOR を開き、取得操作に使用できるようにします。
-
最初の行をフェッチします:
FETCH NEXT ステートメントを使用して取得します結果セットの最初の行を宣言された変数 (@id および @name) にセットします。
-
行をループします:
WHILE ループを使用して、残りの行を次のように繰り返します。 @@FETCH_STATUS が 0 である限り、処理する行がまだあることを示します。
-
ストアド プロシージャ:
ループ内で、EXEC ステートメントを使用してストアド プロシージャを実行し、現在の行から適切なパラメータを渡します。この例では、@id、@otherVarName、および @varForName を渡します。
-
次の行をフェッチします:
ストアド プロシージャを実行した後、もう一度 FETCH NEXT を使用して次の行を取得します。
-
を閉じて割り当てを解除します。 CURSOR:
すべての行を処理した後、CLOSE ステートメントと DEALLOCATE ステートメントを使用して CURSOR リソースを解放します。
これらの手順に従うことで、クエリの結果を効果的にループできます。 T-SQL を使用して行ごとにストアド プロシージャを実行すると、取得したデータに基づいてカスタム操作を実行できます。
以上がT-SQL クエリによって返される各行に対してストアド プロシージャを実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。