0

我可以指望特殊触发器表的顺序,inserted并且deleted,是否相同?

如果不是,我该如何处理影响标识列的插入语句?

我有一个生产(主)数据库。我正在尝试建立一个开发数据库,​​它是生产数据库之上的一层。在开发数据库中,我的应用程序未修改的表和视图是生产数据库的同义词。我为它修改的表设置了视图。当这些视图被更新或插入时,数据被插入到辅助表而不是生产数据库表中。视图从辅助表中选择所有行,然后从生产表中选择辅助表中不存在的任何行(比较在主键列上)。

假设我的一张生产表是MainDB.App.Data,它的辅助表是MockDB.MockTables.Data,视图是MockDB.App.Data。我在更新或插入模拟表的视图上有一个触发器:

USE MockDB

CREATE TRIGGER App.DataTrigger
ON App.Data INSTEAD OF INSERT, UPDATE
NOT FOR REPLICATION AS
BEGIN
    SET NOCOUNT ON

    -- try updating
    UPDATE T1
    SET <all T1 columns to TI columns>
    FROM MockDB.MockTables.Data T1
    INNER JOIN (SELECT *, ROW_NUMBER() OVER (ORDER BY @@ROWCOUNT) as # FROM deleted) TD
        ON T1.Identity = TD.NotificationID
    INNER JOIN (SELECT *, ROW_NUMBER() OVER (ORDER BY @@ROWCOUNT) as # FROM inserted) TI
        ON TD.# = TI.#

    -- see if the update did something
    IF @@ROWCOUNT > 0
    BEGIN
        RETURN
    END

    -- insert rows that don't already exist in the mock table

    SET IDENTITY_INSERT MockDB.MockTables.Data ON

    INSERT INTO MockDB.MockTables.Data (<all columns>)
    SELECT * FROM inserted

    SET NOCOUNT OFF
    SET IDENTITY_INSERT MockDB.MockTables.Data OFF
END
4

0 回答 0