スケジュールされたジョブとして使用するクエリを開発しています。簡単に言うと、テーブルに対していくつかの特定の計算を行い、計算結果に従っていくつかの列 (STATE など) を更新します。
サンプル (現在の状態) は、次のように示すことができます。
UPDATE TEST_TABLE SET STATE = 1
WHERE {some condition}
UPDATE TEST_TABLE SET STATE = 2
WHERE {some condition}
UPDATE TEST_TABLE SET STATE = 3, SOME_OTHER_COLUMN={value}
WHERE {some condition}
WHILE(some condition)
BEGIN
UPDATE TEST_TABLE SET STATE = 4, SOME_OTHER_COLUMN={value}
WHERE {some condition}
END
上記で実証しようとしたのは、クエリの流れです。上に見られるように、私は単一のテーブルを複数回更新しています。ほとんどの場合、異なる条件に応じて異なる値を持つ単一の状態列を設定しています。
また、条件に応じて小さなグループでこのテーブルのデータを更新する必要があったため、(パフォーマンスが低いため) カーソルの代わりに while ループを使用する必要がありました。
すべてのクエリがトランザクションと try-catch ブロックにラップされていると仮定します。
最後に、私の質問は次のとおりです。これは夜間に実行されるスケジュールされたジョブになるため、パフォーマンスは私にとって最優先事項ではありません。ただし、もう少しクリーンで効率的な (パフォーマンス面での) クエリを使用して同じ操作を行う方法を理解できませんでした。アドバイスが必要です。{some condition} 領域は、EXISTS 機能を持つサブクエリを保持することに注意してください。したがって、元のコードはこれよりもはるかに乱雑に見えます。前もって感謝します。――オザン