私はトリガを使用して、同期して単一のデータベースに2つの同一のテーブルを保持しています。 1つは内部プロプライエタリシステム用で、もう1つはデータのサブセットを外部に公開するために使用されます。私は両方のために同じテーブルを使用することはできません。SQL Server 2テーブル同期の再帰
どちらのテーブルにも更新、挿入、削除が必要です。
これまで、私は即時更新を望んでいたので、スケジュールされたストアドプロシージャの代わりに両方のテーブルでトリガを使用しています。問題は、テーブルAへの更新がテーブルBを更新するトリガを起動し、テーブルBを更新するトリガを起動し、トリガをテーブルBに起動するということです。
再帰を止めるにはどうすればよいですか?
一つの方法は、このようなもの、それは異なっているかどうかを確認するために最初のデータをチェックすることです:
SELECT @cempno = inserted.cempno FROM inserted
SELECT @count = COUNT(*)
FROM jcempy j INNER JOIN zhhjcempy z ON j.cempno = z.cempno AND j.cempno = @cempno
WHERE (j.ccostcode <> z.ccostcode)
OR (j.cimearnreg <> z.cimearnreg)
OR (j.cimearnot <> z.cimearnot)
OR (j.cimearndt <> z.cimearndt)
OR (j.cimearnl1 <> z.cimearnl1)
IF @count = 1
BEGIN
-- Update the record
END
もう一つの方法は、最初に開始したテーブルを示すためにステータスフラグを保持している第三のテーブルを使用することができ私は100人のユーザーがシステムにぶち打ちを受けたら、それは問題になると感じている。
データチェックにどのようなパフォーマンス上の違反が生じるかについてのご意見やご意見はありますか?
ありがとうございます!
テーブルを実際には[更新可能なビュー](https://msdn.microsoft.com/en-nz/library/ms187956.aspx#Anchor_3)にすることはできますか? – Blorgbeard
@Blorgbeard残念ながら、ここにはサードパーティのツールが関わっています。興味深い考えですが、私はそれを考えませんでした。 – NelsonH
トリガーを使用しない再設計が必要です。 「1つの時計を持っている人は、何時になったのか分かっています.2人の人は決して確実ではありません」という古い言葉があります。 – JVC