48  
查询码: 00000295
SQL Inserted和deleted详解 - mile - 博客园
来源:https://www.cnblogs.com/lhws/articles/4172139.html
作者: 周杨 于 2020年04月30日 发布在分类 / 计算机应用 / 数据库 ,于 2020年04月30日 编辑
inserted ordertelecom deleted update 数据 触发器 触发 有数 语句 更新



create trigger updateDeleteTime on user for update as begin update user set UpdateTime = ( getdate ()) from user inner join inserted on user .UID = Inserted.UID end



上面的例子是在执行更新操作的时候同时更新,一下修改时间。
关键在于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表有数据(旧数据)

应用实例


set ANSI_NULLS ON set QUOTED_IDENTIFIER ON

go

-- ============================================= -- Author: <Author,sufei> -- Create date: <Create Date,2010-05-11> -- Description: <当是短信充值时修改相信的记录使记录不会重复获取> -- ============================================= 

ALTER TRIGGER [ dbo ].[ updatestart ] ON [ dbo ].[ OrderTelecom ] FOR update AS BEGIN

DECLARE @state int; DECLARE @note2 varchar(50) SELECT @state = Inserted.ortState,@note2 =Inserted.ortNote2 from Inserted IF @state = 1 AND @note2 = 1 begin 

-- 当发短信猫取走记录时修改状态为成功和取过的状态

update OrderTelecom set OrderTelecom.ortState= 2 ,OrderTelecom.ortSmsmessages= ' 短信充值成功 ' from OrderTelecom inner join Inserted on OrderTelecom.ortId=Inserted.ortId end if @state in(2,3,10) and @note2 = 0 begin update OrderTelecom set ortNote2= 1 from OrderTelecom inner join Inserted on OrderTelecom.ortId=Inserted.ortId end END





 历史版本

备注 修改日期 修改人
CREAT 2020-04-30 09:17:05[当前版本] 系统管理员

知识分享平台 -V 5.1.4 -大信谛威