[解決済み] クエリが返す各行に対してストアドプロシージャを1回ずつ実行するにはどうすればよいですか?
2022-04-07 16:38:07
質問
ある方法でユーザーデータを変更するストアドプロシージャがあります。user_idを渡すと、それが実行されます。私はテーブル上でクエリを実行し、私が見つけた各ユーザーIDについて、そのユーザーIDでストアドプロシージャを一度実行したいのです。
どのようにクエリを書けばいいのでしょうか?
どのように解決するのですか?
カーソルを使う
ADDENDUM: [MS SQLカーソルの例]です。
declare @field1 int
declare @field2 int
declare cur CURSOR LOCAL for
select field1, field2 from sometable where someotherfield is null
open cur
fetch next from cur into @field1, @field2
while @@FETCH_STATUS = 0 BEGIN
--execute your sproc on each row
exec uspYourSproc @field1, @field2
fetch next from cur into @field1, @field2
END
close cur
deallocate cur
をMS SQLで実行します。 以下は記事の例です。
カーソルはセットベースの操作より遅いが、手動の while ループより速いことに注意; 詳細 このSOの質問で
補足2: もし数レコード以上の処理を行うのであれば、まずそれらを一時テーブルに取り込み、カーソルをその一時テーブル上で実行します。
ADDENDUM 3: もちろん、ストアドプロシージャが各ユーザーIDに対して行っていることをインライン化し、全体を1つのSQL更新文として実行できれば、それが最適となります。
関連
-
[解決済み】一括読み込みデータ変換エラー(指定されたコードページに対して型の不一致または無効な文字)1行目4列目(年)について)
-
[解決済み] ORA-12801: 並列クエリサーバー P004 および ORA-01555 でシグナルされたエラー: スナップショットが古すぎる。
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] クラスター化インデックスと非クラスター化インデックスの実際の意味は何ですか?
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] MySQLで'insert if not exists'を行うにはどうしたらいいですか?
-
[解決済み] ストアドプロシージャのSELECT FROMの方法
-
[解決済み] SQL Serverストアドプロシージャに配列を渡す方法
-
[解決済み】楽観的なロックと悲観的なロック
-
[解決済み】ストアドプロシージャを作成する前に存在するかどうかを確認する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】INTERSECTとINNER JOINは根本的に違うのか?[重複している]
-
[解決済み】SQL Server: 無効なカラム名
-
[解決済み】sys.dm_exec_sql_textはどのように機能するのでしょうか?
-
[解決済み] 2つの列を分割するには?
-
[解決済み] SELECT DISTINCTを指定した場合、ORDER BY項目は必ず選択リストに表示されます。
-
[解決済み] 検索エラー ORA-00932: 不整合なデータ型: 期待された DATE は NUMBER になりました。
-
[解決済み] CLOBとNCLOBの違いは何ですか?
-
[解決済み] SQLでchar値をmoneyに変換できない
-
[解決済み] SQL ServerでCreateステートメントを使用してtempテーブルを作成する方法は?