0

テーブルAが変更されたときに、テーブルAからテーブルBにデータをコピーするトリガーがあります

トリガーは次のようになります:

ALTER TRIGGER ATrigger 
ON A AFTER INSERT, DELETE, UPDATE
AS
BEGIN
    SET NOCOUNT ON;

    DELETE FROM B WHERE id IN (SELECT id FROM deleted)

    INSERT INTO B(Id, col1,col2) (SELECT i.Id, i.col1, i.col2 FROM inserted i)
END

しかし、Aに挿入されたすべてのデータがBにコピーされているわけではありません。コピーされたデータは非常にランダムに見えます。検索したところ、複数挿入が原因である可能性があります。誰かがカーソルの使用を提案していますが、私の場合は、この2つのSQLを使用して、挿入、削除されたテーブルに挿入または削除してもかまいません。

アドバイスしてください、ありがとう!

4

1 に答える 1

1

これがあなたの問題かどうかはわかりませんが、トリガーには2つの「落とし穴」があります。最初に挿入すると、削除されたテーブルには行が含まれないため、削除は行われません。2番目は逆であり、潜在的にあなたの問題です。削除すると、挿入されたテーブルには行がありません。したがって、すべての ID がテーブル B から削除されますが、再挿入はされません。これに加えて、ID がテーブル A の一意のキーではない場合、その 2 番目のコピーを挿入すると、テーブル B のすべての履歴が削除され、「新しい」履歴のみが追加されます。

2 つのテーブルの構造とトリガーの目的に関する詳細情報を提供していただければ、挿入される行または挿入されない行のパターンは言うまでもなく、場合によってはさらに役立つ可能性があります。

于 2013-02-20T04:45:20.253 に答える