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)
谢谢
在触发器中,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