2017-01-08 7 views
0

アプリケーションに2つのテーブルがあります(バグトラッカーを作成しようとしています)。 1つはレコード/問題を追加でき、もう1つは問題の履歴です。変更/監査履歴用にSQL Serverにトリガを挿入

したがって、2番目の(Bugs_Shadow)テーブルは新しいレコードを最初のバグ(Bugs)と共に作成し、誰かが修正を試みたときにテーブル1の問題を更新できます。更新をクリックすると、更新行全体が2番目の表に追加されますが、元のレコードも保持されます。したがって、変更が行われるたびにBugs_Shadowテーブルに新しいレコードが作成されます。私はそれが理にかなってほしいのですか

私はこのトリガーを作成しました:

CREATE TRIGGER [tr_Bugs_Insert] 
    ON [dbo].[Bugs] 
    AFTER UPDATE, INSERT 
    AS 
    BEGIN 
     INSERT INTO Bugs_Shadow (BugID, [User], Date, Subject, Description, [Source Code], [Current State]) 
     SELECT BugID, [User], Date, Subject, Description, [Source Code], [Current State] 
     FROM Bugs 

    END 
    GO 

それは、これまでに2回目の表に、同一のエントリを作成するように動作しますが、私は第一テーブルのエントリを更新するとき、それは第二に同じことを行い一方私は、ユーザーが行った変更とは別に新しいレコードを作成したいと思っています。

そこにいくつかの助けがありますように。それは私の最初の試みであり、この段階に入るまでには時間がかかりました。あなたがここにトリガーする必要が

おかげ

答えて

0

:後

  • 一つ1つの表の挿入、それを挿入するために一つのテーブルで更新する前に、他の
  • 一つに挿入しますもう一方へ

CREATE TRIGGER [tr_Bugs_Insert] 
    ON [dbo].[Bugs] 
    AFTER INSERT 
    AS 
    BEGIN 
     INSERT INTO Bugs_Shadow (BugID, [User], Date, Subject, Description, [Source Code], [Current State]) 
     SELECT BugID, [User], Date, Subject, Description, [Source Code], [Current State] 
     FROM Bugs 
END 
GO 

CREATE TRIGGER [tr_Bugs_Update] 
    ON [dbo].[Bugs] 
    BEFORE UPDATE 
    AS 
    BEGIN 
     INSERT INTO Bugs_Shadow (BugID, [User], Date, Subject, Description, [Source Code], [Current State]) 
     SELECT BugID, [User], Date, Subject, Description, [Source Code], [Current State] 
     FROM Bugs 
END 

上記有効ではありませんので

MS SQLは、トリガーの前には対応していませんEDIT。 INSTEADトリガーを使用できます。 INSTEADトリガーでは、トリガーのみが実行され、元のステートメントは実行されません。 そのトリガーで行うべきことは、あるテーブルに古い値を挿入して、もう一方のテーブルを更新することです。そこに代替ソリューションを指定する際にいくつかの回答にもあります How can I do a BEFORE UPDATED trigger with sql server?

詳細情報については、この質問を参照してください。

+0

迅速な対応をありがとうございます。しかし、私は次のエラーが表示されます。SQL80001: 'BEFORE'の近くに構文が正しくありません。何か案は? –

+0

私は悪いですが、MS SQLはBEFOREトリガーをサポートしていません。 'AFTER'と 'BEFORE'ではないと予期しています。 –

+0

私の更新された答えを見る – Kenneth

関連する問題