C# 在SQL Server上插入更改/审核历史记录的触发器

C# 在SQL Server上插入更改/审核历史记录的触发器,c#,sql-server,database,triggers,bug-tracker,C#,Sql Server,Database,Triggers,Bug Tracker,我的应用程序上有两个表(我正在尝试创建一个bug跟踪器)。一个是我可以添加记录/问题的,另一个是问题的历史记录 因此,第二个(Bugs_Shadow)表将与第一个(Bugs)表一起创建新记录,然后,当有人尝试修复时,我可以更新表1上的问题。单击更新时,我希望它将更新行作为一个整体添加到第二个表中,但同时保留原始记录。因此,无论何时进行更改,都会在Bugs_Shadow表中创建一条新记录。我希望这有意义 我创建了这个触发器: CREATE TRIGGER [tr_Bugs_Insert]

我的应用程序上有两个表(我正在尝试创建一个bug跟踪器)。一个是我可以添加记录/问题的,另一个是问题的历史记录

因此,第二个(Bugs_Shadow)表将与第一个(Bugs)表一起创建新记录,然后,当有人尝试修复时,我可以更新表1上的问题。单击更新时,我希望它将更新行作为一个整体添加到第二个表中,但同时保留原始记录。因此,无论何时进行更改,都会在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
它的工作原理是在第二个表中创建相同的条目,但当我更新第一个表中的条目时,它在第二个表中执行相同的操作,而我希望它创建一个与用户所做更改不同的相同的新记录

希望有人能帮忙。这是我第一次尝试触发器,我花了一段时间才到达这个阶段


谢谢

您需要在此处触发:

  • 一个在一个表中插入,然后插入另一个表
  • 一个在一个表中更新以将其插入另一个表中

编辑

MS SQL不支持before触发器,因此上述设置无效。 您可以使用
触发器。如果使用
触发器,则只执行触发器,而不执行原始语句。
因此,在触发器中应该做的是在一个表中插入旧值,然后更新另一个表

有关更多信息,请参见此问题:


还有一些答案指定了替代解决方案。

感谢您的快速响应。但是,我得到了以下错误:SQL80001:靠近“BEFORE”的语法不正确。有什么想法吗?它似乎期待的是“在”之后而不是“在”之前。糟糕,MS SQL不支持BEFORE触发器。查看我的最新答案
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