【问题标题】:Insert Trigger on SQL Server for Change/Audit History在 SQL Server 上插入触发器以获取更改/审核历史记录
【发布时间】:2017-01-08 22:57:03
【问题描述】:

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

因此,第二个 (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

它可以在第二个表中创建相同的条目,但是当我更新第一个表中的条目时,它在第二个表中执行相同的操作,而我希望它创建一个相同的新记录来自用户所做的更改。

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

谢谢

【问题讨论】:

    标签: c# sql-server database triggers bug-tracker


    【解决方案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 不支持 before 触发器,所以上述内容无效。 您可以使用INSTEAD 触发器。使用INSTEAD 触发器时,只会执行触发器而不执行原始语句。 所以你应该在那个触发器中做的是在一个表中插入旧值并更新另一个表。

    有关详细信息,请参阅此问题: How can I do a BEFORE UPDATED trigger with sql server?

    那里也有一些指定替代解决方案的答案。

    【讨论】:

    • 感谢您的快速回复。但是,我收到以下错误:SQL80001:'BEFORE'附近的语法不正确。有什么想法吗?
    • 它似乎期待“之后”而不是“之前”
    • 我的错,MS SQL 不支持 BEFORE 触发器。查看我的更新答案
    猜你喜欢
    • 1970-01-01
    • 2012-03-06
    • 1970-01-01
    • 2016-09-18
    • 2014-10-09
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    相关资源
    最近更新 更多