Triggers 写时复制触发器

Triggers 写时复制触发器,triggers,sql-server-2008-r2,dml,copy-on-write,Triggers,Sql Server 2008 R2,Dml,Copy On Write,我能指望插入和删除的特殊触发器表的顺序相同吗 如果没有,如何处理影响标识列的insert语句 我有一个生产主数据库。我正在尝试建立一个开发数据库,它位于生产数据库之上。在开发数据库中,我的应用程序不修改表,视图是生产数据库的同义词。我已经为它所修改的表设置了视图。更新或插入这些视图时,数据将插入辅助表而不是生产数据库表。视图选择辅助表中的所有行,然后选择辅助表中不存在的生产表中的任何行。比较在主键列上 假设我的一个生产表是MainDB.App.Data,它的辅助表是MockDB.MockTabl

我能指望插入和删除的特殊触发器表的顺序相同吗

如果没有,如何处理影响标识列的insert语句

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

假设我的一个生产表是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

不,不能指望“插入”和“删除”以完全相同的顺序包含相关行。你的桌子没有钥匙吗?为什么不基于该列而不是常量来计算行数>我希望能够处理有人更改主键列的情况这是否真的经常发生,以至于您需要将其自动化?可能不会,而且对于我的应用程序,我不希望任何人能够以任何方式,但原则上,我想知道怎么做。