SQL2000中,inserted表和deleted表用于存放对表中数据行的修改信息。他们是触发器执行时自动创建的,放在内存中,是临时表。当触发器工作完成,它们也被删除。它们是只读表,不能向它们写入内容。
inserted表:用来存储INSERT和UPDATE语句所影响的行的副本。意思就是在inserted表中临时保存了被插入或被更新后的记录行。在执行 INSERT 或UPDATE 语句时,新加行被同时添加到inserted表和触发器表中。因此,可以从inserted表检查插入的数据是否满足需求,如不满足则回滚撤消操(cāo)作。
deleted表:用来存储DELETE和UPDATE语句所影响行的副本。意思是在delete表中临时保存了被删除或被更新前的记录行。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传到deleted表中。所以可以从deleted表中检查删除的数据行是否能删除。
所以当表中某条记录的某项值发生变化时,变化前的值已经通过系统自动创建的临时表deleted表和inserted表保存了被删除行或插入的记录行的副本。我们可以从这两个表中查询出变化前的值并赋给变量。
我给你个表对应一下这两临时表的功能:
修改操作 inserted表 deleted表
增加(INSERT)记录时 存放新增的记录 不记录
删除(DELETE)时 不记录 存放被删除的记录
修改(UPDATE)时 存放用来更新的记录 存放更新前的记录
更新前的值可以从deleted表中查询出来,直接:select * from deleted
“*”可以换成你要查询的列名。
例如:我给个数据备份的,表table2用来做备份表,前提是表table1中有数据被删除。
/*---检查是否存在触发器---*/
if exists(select name from sysobjects where name = tri_delete)
drop trigger tri_delete
go
/*--在表table2上创建delete触发器---*/
create trigger tri_delete on table2
for delete
as
print '开始数据备份.....'
if not exists(select * from sysobjects where name = 'table1')
select * into table1 from deleted---从deleted表中获取被删除的数据
else
insert into table1 select * from deleted
print '备份成功,备份表中数据为:'
select * from table1
go
/*---测试触发器:删除数据---*/
SET NOCOUNT ON ---不显示T—SQL语句影响的行数
delete table2
---查看结果
select * from table2
delete触发器的典型应用是数据备份;update触发器主要用来跟踪数据的变化;下面这个就是把变化前后的项的值写入table2的例子,这个例子我假设了2个表table1,table2各有3列,都是Uid,Uname,sex且全部允许为空:结果是表2得到更改项前后变化值。
if exists(select name from sysobjects where name = 'tri_test')
drop trigger tri_test
go
create trigger tri_test on table1
for update
as
declare @beforesex varchar(8),@aftersex varchar(8)
select @beforesex = sex from deleted ---变更前的数据
select @aftersex = sex from inserted ---变更后的数据
if update(sex)
begin
---把改变前后的值写入table2中
insert into table2 (sex) values (@beforesex)
insert into table2 (sex) values (@aftersex)
end
go
转自:http://blog.csdn.net/ashou706/archive/2008/12/31/3664657.aspx
分享到:
相关推荐
在 SQL Server 触发器中,系统自动会生成两张临时表,分别是 deleted 和 inserted 表。这些表可以理解为临时表,也可以认为是逻辑表或概念表。它们的表结构与原表是完全相同的。 Inserted 表和 Deleted 表的作用 ...
在 SQL Server 中,`Inserted` 和 `Deleted` 是两个特殊的表,它们主要用于触发器(Trigger)中。当执行 INSERT、UPDATE 或 DELETE 操作时,系统会自动创建这两个虚拟表,并填充相应的数据。本文将详细介绍这两个表...
触发器中两个临时表详解 ...inserted 和 deleted 两个临时表在触发器中起着重要的作用,通过它们可以精确地确定触发器的动作对数据表所做的修改,并且可以用于触发器的条件测试。但是,用户不能直接更改它们的内容。
- deleted和inserted表的区别与使用场景。 - 示例代码和案例研究。 - 性能考虑和最佳实践。 6. **最佳实践** - 避免过度使用级联触发器,以免导致不必要的复杂性。 - 在使用deleted表时,注意不要对它进行...
在讨论SQL Server 2000中的触发器时,我们通常会涉及两个特殊的临时表:inserted和deleted。这两个临时表在触发器的执行过程中扮演了非常重要的角色,尤其是在处理数据的插入、更新和删除操作时。在触发器的上下文中...
在实际应用中,SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表,当触发器被执行时产生。这是两个逻辑表,存放在内存中,表的结构与被触发器作用的表的结构相同且由系统自动创建和撤销。 使用...
在DML触发器内部,逻辑表INSERTED和DELETED是两个特殊的表,它们仅在触发器的上下文中可用。它们用于存储触发器操作影响的行数据。 INSERTED表 INSERTED表在INSERT或UPDATE触发器中用来存储触发操作后的新行数据。...
- 触发器可以通过检查`deleted`表和`inserted`表来确定哪些数据发生了变化,以及如何处理这些变化。 3. **DELETE触发器**: - 当执行DELETE语句时,被删除的数据行被复制到`deleted`表中。 - 如果定义了DELETE...
SQL Server为每个触发器都创建了两个专用虚拟表:inserted表和deleted表。这两个表由系统来维护,他们存在于内存中,而不是在数据库中。这两个表的结构总是与被该触发器作用的表结构相同。触发器执行完成后,与该...
在触发器内部,通过计算inserted表和deleted表中学分字段的差值,并结合学生表,来计算每个学生在更新后的总学分,从而保证了数据的准确性和完整性。 文章还指出了多行数据更新引发的触发器设计比单条记录更新时...
- 示例中通过`INSERT INTO`语句向`XINXIN_TAB`和`FENSHU_TAB`插入数据,确保了各个表中有数据可供触发器操作。 6. **视图与多表更新**: - 虽然未直接提及视图,但视图可以结合触发器用于实现多表操作。视图是...
SQL Server为每个触发器创建了两个特殊的表——Inserted表和Deleted表。这两个表由系统维护,并且只存在于内存中,而不是数据库中。这两个表的结构与触发器作用的表结构完全相同。 - **Deleted 表**:存储由于执行...
在本文中,我们将深入探讨两个与触发器紧密相关的临时表——Inserted和Deleted,以及如何利用它们来实现数据的跟踪和备份。 Inserted表和Deleted表是在触发器执行期间创建的隐式内部表,它们仅在触发器的上下文中...
例如,可以在学生表(Student)中定义一个修改触发器,当对表中记录进行修改时,触发器会被激活并显示学生表、inserted表和deleted表中的所有记录。通过触发器,可以详细查看到修改前后的数据差异。 在另外一个应用...
触发器的执行过程中,SQL Server 会维护两个虚拟表,分别是Inserted表和Deleted表。这两个表在触发器被触发时存在,用以存储操作所涉及的数据。具体而言,Deleted表存储的是被DELETE或UPDATE语句影响的行的副本,即...
SQL Server 为每个触发器都创建了两个专用表:Inserted 表和 Deleted 表。这两个表由系统来维护,它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行完成后,与该...
在SQL Server中,每个触发器执行期间,系统会创建两个特殊的逻辑表:inserted表和deleted表。这些表用于存储被触发器操作影响的行的副本。具体作用如下: - Inserted表:在执行INSERT或UPDATE操作时,新的行会同时...
- 触发器可以通过比较`deleted`表和`inserted`表中的数据来判断哪些字段发生了改变,并据此执行相应的操作。 - `deleted`和`inserted`表中的行都是目标表中对应行的副本,这样可以方便地访问更改前后的数据。 **3. ...