上面的例子是在执行更新操作的时候同时更新,一下修改时间。
关键在于Inserted表触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。
1.插入操作(Insert)
Inserted表有数据,Deleted表无数据 2.删除操作(Delete) Inserted表无数据,Deleted表有数据 3.更新操作(Update) Inserted表有数据(新数据),Deleted表有数据(旧数据)应用实例
代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo-- =============================================-- Author:-- Create date: -- Description: <当是短信充值时修改相信的记录使记录不会重复获取> -- =============================================ALTER TRIGGER [dbo].[updatestart]ON [dbo].[OrderTelecom] FOR updateAS BEGINDECLARE @state int;DECLARE @note2 varchar(50)SELECT @state= Inserted.ortState,@note2 =Inserted.ortNote2 from InsertedIF @state=1 AND @note2=1begin--当发短信猫取走记录时修改状态为成功和取过的状态update OrderTelecom set OrderTelecom.ortState=2 ,OrderTelecom.ortSmsmessages='短信充值成功'from OrderTelecom inner join Inserted on OrderTelecom.ortId=Inserted.ortId endif @state in(2,3,10) and @note2=0beginupdate OrderTelecom set ortNote2=1from OrderTelecom inner join Inserted on OrderTelecom.ortId=Inserted.ortId endEND 当是短信充值时修改相信的记录使记录不会重复获取>