1

テーブルからsprocに値を挿入する必要があります。例えば:

exec mysproc @param1='col1', @param2='col2'

これはカーソルを使用して実行できますが、集合演算を介して実行する方法はありますか?

4

2 に答える 2

1

「集合演算」の一部としてsprocを呼び出すことはできません。おそらく、その理由は、sprocがデータの変更、追加の結果セット(!)の送信、サーバーのシャットダウンなどの任意の副作用を引き起こす可能性があるためです。

カーソルは、これに対する標準的なアプローチです。(ああ)

もちろん、TVPを取得するようにsprocを変更することもできます。それがあなたのために実行可能かどうかわからない。

于 2013-01-03T19:02:07.813 に答える
1

どの方法を選択するかは、利用可能な時間に基づいていると思いますが、これらの方法のどれが最も時間がかかるかは、ロジックを詳しく理解しないとわかりません。

この問題にはいくつかのアプローチがあります。

  1. Robert Harvey が示唆しているように、テーブル値パラメーターを受け入れるように proc を変更することを検討する必要があります (SQL Server 2008 以上を使用している場合)。そうでない場合は、プロシージャ内のテーブルに「デコード」されるスカラー XML パラメーターを作成できます。
  2. #table に「パラメータ データ」と ROW_NUMBER() を入力し、WHILE ループを使用して #table の各行の proc を呼び出します。
  3. タイプ FAST_FORWARD の CURSOR (私は CURSOR のアドバイスは嫌いです) を作成し、プロシージャを繰り返し呼び出します。
  4. 動的 SQL; EXEC またはできれば SP_EXECUTESQL を使用して SQL コマンド文字列を作成します。
  5. 私の意見では、最初の賞は、パラメーター フィルターを受け入れるように proc を再設計することです。パラメータを作成するデータセットは、フィルタされたクエリの結果であると仮定します。
SELECT Moo, Meow
FROM Woof
WHERE Fu = @ParmX 
AND Bar = @ParmY

proc を呼び出す必要が@ParmX, @ParmYあり、内部のロジックはセット ベースの方法で処理されます。

于 2013-01-03T18:49:14.237 に答える