2017-11-23 10 views
1

私は初心者だと変化しているかどうかを確認するためにトリガーを作成する方法私のコードテーブルは、テーブルが、その後変更された場合は、私がチェックするためにトリガーを作成しようと、私は変更を追跡し、私はテーブルの歴史と呼ばれる作成</p> <p>別のテーブルに挿入し、これは

create table history 
(
ProjectNo INT , 
UserName NVARCHAR(50), 
ModifiedDate date, 
Budget_Old int, 
Budget_New int, 
) 

CREATE TRIGGER t1 on history 
on project AFTER UPDATE 
AS BEGIN 
    IF UPDATE(Project.Pnumber,Project.Budget) 
    INSERT INTO dbo.history (ProjectNo , Username,ModifiedDate,Budget_Old,Budget_New) 
      SELECT 
      d.ProjectNo, suser_name() ,GETDATE(),d.Budget,i.budget 
      FROM 
      Deleted d , inserted i 
      where d.projectno = i.projectno 
END 

このトリガーを作成しなステートメントが間違っているが、私は私のクエリは、右 実行させるために何をすべきか私は私だと思いますこの値を履歴テーブルに挿入しますか? plzは私を助けて、悪い英語を残念に思っています

答えて

1

トリガーは、定義されているテーブルと同じ構造を持つ2つの論理テーブルにアクセスします。私はこれを仮定してProjectと仮定します。テーブルにある古いデータである

  • が削除されたテーブルに移動するための新しいデータである

    • 挿入、

    だから、あなたはこのように古い値を取得することができます:あなただけのテーブルの歴史の中で、特定のプロジェクトに1つのレコードを持っている必要がある場合は

    CREATE TRIGGER t1 
         ON dbo.Project AFTER UPDATE 
         AS 
          INSERT INTO dbo.history (ProjectNo , Username) 
          SELECT d.ProjectNo , d.Username 
          FROM DELETED d 
    

    、あなたはprojectNoに基づいて内部ジョイン使用するであろうし、それに応じて履歴テーブルを更新します。

  • +0

    私は自分の質問を編集できましたか?それは動作しません – Yasmeen

    +1

    タイ最後にそれをしました^ _ ^ – Yasmeen

    0

    ITS WORKS BUDDYはENJOY !!!!!!!!!!!

    CREATE TRIGGER tRIGGERNAME1 
    BEFORE UPDATE on history 
    FOR EACH ROW 
    BEGIN 
    INSERT INTO dbo.history (ProjectNo ,Budget_Old,Budget_New) 
    VALUES(:OLD.ProjectNo,:OLD.Budget_Old,:NEW.Budget_New); 
    END; 
    
    関連する問題