在更新另一个表时将数据插入新表的触发器

时间:2013-11-21 04:26:11

标签: sql-server triggers

我创建了一个Modified Order表,并没有向其中插入任何数据。每当有人更新订单表时,该表应该有一个条目。我创建了一个触发器,声明如果更新Order表中的一行,它会触发Order Modified表中的一个条目。它工作正常,唯一的问题是我不知道如何获得更新的订单ID以输入订单修改表。

订单修改表代码:

Create Table Modified_Order (
Modified_Order_Number    Int Identity (1,1),
Modified_Order_Date      Date,
Order_ID                 Int,

Foreign Key (Order_ID) references Orders (Order_ID) 
);

触发码:

Create Trigger Modified_Order_Trigger
      On Orders After Update
      AS
      Insert Into Modified_Order Values (getdate(),    ) 

;

我遇到的问题是获取已更新的订单的订单ID,以显示在Order Modified表中。我知道它出现在getdate()之后留空的地方。我知道它与添加select语句有关,我只是不确定在where语句之后放入什么,所以它知道在订单表中更新订单的订单ID。

Create Trigger Modified_Order_Trigger
      On Orders After Update
      AS
      Insert Into Modified_Order Values (getdate(), (Select Order_ID
                                                      from Order
                                                        where     ) 

;

由于

1 个答案:

答案 0 :(得分:6)

在触发器中,INSERTED和DELETED虚拟表具有来自两种状态的数据:INSERTED具有新的INSERT或UPDATE,而DELETED具有旧的UPDATE或DELETE。所以语法基本上是:

Create Trigger Modified_Order_Trigger
   On Orders
   After Update
   AS

     Insert Into Modified_Order (Modified_Order_Date, Order_ID)
       SELECT GETDATE(), Order_ID
       FROM INSERTED

有关触发器的更多信息,请查看此处:http://technet.microsoft.com/en-us/library/ms189799.aspx