巨大なストアド プロシージャがあり、それを最適化しようとしています。
列Idを持つ一時テーブルAがあります。
列IDとブールフィールドTestを持つメインテーブルBがあります
Table A のすべての Id について、Table B で Test = 1 にする必要があります。
例: あ
Id
--
1
2
3
次のようにテーブルBを取得する必要があります。私はすでにテーブル B に Id フィールドを持っています。テスト列 Bを更新するだけです。
Id Test
-- ----
1 1
2 1
3 1
4
5
6
現在、while ループを使用してテーブルAをループ処理しており、ID ごとにテーブルBの Test 列を更新しています。
WHILE (1 = 1)
BEGIN
-- Exit loop if no more Transactions
IF @@ROWCOUNT = 0 BREAK;
Update [B]
set Test = 1
where Id = (SELECT TOP 1 Id
FROM #B
WHERE Id > @Id1
ORDER BY Id)
END
PS : @Id1 は、ストアド プロシージャの入力パラメーターです。
他に効率的な方法は考えられませんが、クエリの実行に時間がかかります.同じことを行うより良い方法があれば教えてください。