同じサーバー上の別のテーブルを更新する保留中のデータを保持するテーブルがあります。この保留中のテーブルは、別のサーバーのストアドプロシージャからデータを取得します。データがこの保留中のテーブルに入ると、ストアドプロシージャは、保留中のテーブルのtinyint列に基づいて、挿入、更新、または削除を試みます。
この保留中のテーブルは、何かが発生する必要がない限り、空のままになります。手順の最後に、この保留中のテーブルから削除します。
プロシージャの実行中に、更新が必要な同じレコードが他のサーバーから2回挿入された場合にどうなるかという問題が発生しました。最後に、両方のレコードがクリアされます。保留中のテーブルにインクリメンタルIDを追加してこれを解決しようとしましたが、挿入にIDを出力できません。
insert into config.table (col1, col2, col3)
output inserted.col3, pendingId into @table
select p.col1, p.col2, p.col3
from pendingTable p
left join config.table t on p.col1 = t.col1
where t.col1 is null
保留中のIDでエラーが発生します。変更されていないレコード(プロシージャの実行中に追加された新しく挿入されたレコード)が削除されないように、@table変数を使用して保留中から削除する予定です。
delete p
from pendingTable p
inner join @table t on p.pendingId = t.pendingId and p.col3 = t.col3