私は良い DB 開発者になろうとしており、ここでループやカーソルを使用しないようにしていますが、これができるかどうかはわかりません。
テーブル A に、さまざまな処理キューへのポインターを表す行があります。テーブル BI には、処理が必要なデータがあります。テーブル A の行には、データを処理するために処理キューが最後に使用された時期を示すために使用される というdatetime
列が含まれています。この列は、テーブル B の行が特定のキューに割り当てられるたびLastUsed
に更新されます...そして、ラウンドロビン キューの問題の核心です。GETUTCDATE()
テーブル B に 50 のデータ行があり、テーブル A に 5 つのキュー行があるとします。セットベースの方法で、テーブル A のキュー ID をテーブル B の 50 行すべてに割り当てる必要がありUPDATE
、最終的には次のようになります。
表 B
data record 1 - queue 1
data record 2 - queue 2
data record 3 - queue 3
data record 4 - queue 4
data record 5 - queue 5
data record 6 - queue 1
data record 7 - queue 2
data record 8 - queue 3
etc...
基本的に、LastUsed
テーブル A の各キュー行の列は、テーブル B のデータ行のキュー列が更新されるたびに更新する必要があるため、次のデータ行はテーブル A から「新しい」最も古いキュー行を受け取ります。
UDF を作成しようとしましたが、UPDATE
UDF 内からコマンドを使用できません。また、テーブル Bの別のステートメント内にラップすることを期待UPDATE
して、句を使用してテーブル Aのネストされたステートメントを試しましたが、SQL Server は、そのような更新をネストできないことを通知します。OUTPUT
UPDATE
私はここで立ち往生していますか?カーソルまたはループを使用する必要がありますか?