我们有大量具有相同架构的数据库,每个数据库都有一个带有触发器的表,用于将记录与中央数据库中的另一个表同步。当表被更新、插入或删除时,中央数据库中的表也有更新、插入或删除的记录。
我们一直在让记录神秘地从中央数据库的表中消失。在研究这个问题时,我发现当插入/删除触发器触发时,deleted
表中的记录不是来自当前的删除语句。它们甚至不是同一个数据库中的记录。它们看起来像另一个数据库中同一张表上更新语句的旧值记录。
我能找到的所有信息都表明deleted
表中的记录应该来自导致触发器触发的语句。
谁能解释为什么我会看到这种行为?
编辑:这是插入/删除触发器的样子:
DECLARE @TenantID INT
SELECT @TenantID = ID FROM [CentralDB]..Tenants WHERE db = DB_Name()
INSERT INTO [CentralDB].[dbo].[TenantUsers]
(..snipped list of columns...)
SELECT
...snipped list of columns...
FROM inserted
WHERE UserNameID NOT IN (0,6)
DELETE FROM [CentralDB]..TenantUsers WHERE UserNameID in
(SELECT UserNameID FROM DELETED WHERE UserNameID NOT IN (0,1,6))
和更新触发器:
DECLARE @TenantID INT
SELECT @TenantID = ID FROM [CentralDB]..Tenants WHERE db = DB_Name()
UPDATE [CentralDB].[dbo].[TenantUsers]
SET ...snipped list of columns...
FROM INSERTED i
WHERE i.UserNameID = TenantUsers.UserNameID
AND i.UserNameID NOT IN (0,6)