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

use*_*938 1 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) 
);
Run Code Online (Sandbox Code Playgroud)

触发代码:

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

;
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是获取已更新的订单的订单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     ) 

;
Run Code Online (Sandbox Code Playgroud)

谢谢

Sol*_*zky 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
Run Code Online (Sandbox Code Playgroud)

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