[解決済み] [Solved] TSQLでカーソルを使用せずにテーブル変数をループする方法はありますか?
2022-04-17 03:46:12
質問
例えば、次のような簡単なテーブル変数があるとします。
declare @databases table
(
DatabaseID int,
Name varchar(15),
Server varchar(15)
)
-- insert a bunch rows into @databases
行を反復処理する場合、カーソルを宣言して使用するのが唯一の選択肢でしょうか?他の方法はないのでしょうか?
どのように解決するのですか?
まず第一に、各行を反復処理する必要があることを絶対に確認する必要があります。私が思いつく限り、あらゆるケースでセットベースの操作がより速く実行され、通常はよりシンプルなコードを使用します。
データによっては、ループは
SELECT
文は、以下のようになります。
Declare @Id int
While (Select Count(*) From ATable Where Processed = 0) > 0
Begin
Select Top 1 @Id = Id From ATable Where Processed = 0
--Do some processing here
Update ATable Set Processed = 1 Where Id = @Id
End
もう一つの方法は、一時テーブルを使用することです。
Select *
Into #Temp
From ATable
Declare @Id int
While (Select Count(*) From #Temp) > 0
Begin
Select Top 1 @Id = Id From #Temp
--Do some processing here
Delete #Temp Where Id = @Id
End
どのオプションを選ぶべきかは、データの構造と量に大きく依存します。
注 SQL Serverを使用している場合は、こちらを使用した方が良いでしょう。
WHILE EXISTS(SELECT * FROM #Temp)
使用方法
COUNT
は、テーブルのすべての行に触れなければならないので
EXISTS
は最初の1つだけを触ればいいのです (
ヨーゼフさんの回答
となります。)
関連
-
[解決済み] サブレポートが表示されない。サブレポートは別々に動作します - メインレポートとは連動しません
-
[解決済み] SQL Server: sys.master_files vs. sys.database_files
-
[解決済み] 変数に値を代入するSELECT文は、データ検索操作と組み合わせてはいけません。
-
[解決済み] sp_addrolememberとalter user with default schemaの違いは何ですか...?
-
[解決済み] SQL ServerでRegExを使用する
-
[解決済み] SQL Serverでマテリアライズド・ビューを作成する方法は?
-
[解決済み] データを別のテーブルにコピーする
-
[解決済み] SQL Serverは、ビュークエリでLEFT JOINをLEFT OUTER JOINに置き換えます。
-
[解決済み] SQL ServerでGROUP BYと一緒にDISTINCTを使用する
-
[解決済み] forループを壊さずに配列をループして項目を削除する
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】SQL Server データベース復元エラー:指定されたキャストは有効ではありません。(SqlManagerUI)
-
[解決済み】PRIMARY KEY制約に違反しました。オブジェクトに重複したキーを挿入できない
-
[解決済み] SSRS レポートの定義が無効です。
-
[解決済み] SQL Server: sys.master_files vs. sys.database_files
-
[解決済み] データ損失の可能性があるため、スキーマの更新を終了します。
-
[解決済み] オペランドタイプの衝突
-
[解決済み] 関数内から実行できるのは、関数と一部の拡張ストアドプロシージャのみです。
-
[解決済み] SQLでテーブルの行数を数える
-
[解決済み] スカラー変数を宣言する必要があります。
-
[解決済み] SQL ServerでGROUP BYと一緒にDISTINCTを使用する