我可以指望特殊触发器表格的顺序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