我希望有人可以提供帮助。我在名为Subscriptions的表上有一个现有的数据库触发器。我正在通过它来了解改变的地方。这是代码: -
1: CREATE TRIGGER [dbo].[trUpdateSubscription] ON [dbo].[Subscription]
2: FOR INSERT,UPDATE
3: AS
4:
5: IF (UPDATE(IssuesPurchased) OR UPDATE(IssuesSent))
6: /* If the issues sent = the issues purchased, expire the subscription */
7:
8: BEGIN
9:
10: UPDATE Subscription
11: SET StatusID = CASE
12: WHEN Subscription.IssuesPurchased > Subscription.IssuesSent AND inserted.StatusID<>2 THEN 1 --Activate the subscription.
13: WHEN Inserted.StatusID = 1 AND Subscription.IssuesPurchased <= Subscription.IssuesSent THEN 3 --Expire the subscription.
14: ELSE Inserted.StatusID --No Change
15: END
16:
17: OUTPUT SYSDATETIME(), INSERTED.*, DELETED.* INTO dbo.Subscription_Change_Log
18: FROM Inserted
19: INNER JOIN Subscription ON Inserted.ID = Subscription.ID
20: LEFT JOIN Deleted ON Inserted.ID = Deleted.ID
21: WHERE Deleted.ID IS NULL OR -- when record INSERTED
22: Inserted.IssuesPurchased <> Deleted.IssuesPurchased OR -- else UPDATE,
23: Inserted.IssuesSent <> Deleted.IssuesSent -- so only select records with changed fields
24:
25: END
26:
27: .........
还有其他一些步骤,但这一部分展示了我的问题。 在执行触发器之前,订阅记录的StatusID为1.我知道第13行的条件为真,因此StatusID更改为3.我将OUTPUT添加到日志表(第17行)以检查INSERTED和DELETED表的状态。日志文件显示StatusID正在从1升级到3.但是当我在第26行之后直接查询INSERTED表时,INSERTED表仍然将StatusID显示为1.
所以,我想知道的是,这里有2套INSERTED和DELETED表吗?几乎像嵌套交易?
很抱歉这个冗长的解释。非常感谢。