SQL触发器中INSERTED和DELETED表的状态

时间:2014-07-16 12:13:14

标签: sql sql-server-2008-r2 triggers

我希望有人可以提供帮助。我在名为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表吗?几乎像嵌套交易?

很抱歉这个冗长的解释。非常感谢。

0 个答案:

没有答案
相关问题