Triggers 写时复制触发器
我能指望插入和删除的特殊触发器表的顺序相同吗 如果没有,如何处理影响标识列的insert语句 我有一个生产主数据库。我正在尝试建立一个开发数据库,它位于生产数据库之上。在开发数据库中,我的应用程序不修改表,视图是生产数据库的同义词。我已经为它所修改的表设置了视图。更新或插入这些视图时,数据将插入辅助表而不是生产数据库表。视图选择辅助表中的所有行,然后选择辅助表中不存在的生产表中的任何行。比较在主键列上 假设我的一个生产表是MainDB.App.Data,它的辅助表是MockDB.MockTables.Data,视图是MockDB.App.Data。我在视图上有一个触发器,用于更新或插入模拟表: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
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
不,不能指望“插入”和“删除”以完全相同的顺序包含相关行。你的桌子没有钥匙吗?为什么不基于该列而不是常量来计算行数>我希望能够处理有人更改主键列的情况这是否真的经常发生,以至于您需要将其自动化?可能不会,而且对于我的应用程序,我不希望任何人能够以任何方式,但原则上,我想知道怎么做。