`
isiqi
  • 浏览: 16362398 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

触发器中的 inserted表和deleted

阅读更多

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触发器中自动生成的临时表

    在 SQL Server 触发器中,系统自动会生成两张临时表,分别是 deleted 和 inserted 表。这些表可以理解为临时表,也可以认为是逻辑表或概念表。它们的表结构与原表是完全相同的。 Inserted 表和 Deleted 表的作用 ...

    SQL Inserted和deleted详解

    在 SQL Server 中,`Inserted` 和 `Deleted` 是两个特殊的表,它们主要用于触发器(Trigger)中。当执行 INSERT、UPDATE 或 DELETE 操作时,系统会自动创建这两个虚拟表,并填充相应的数据。本文将详细介绍这两个表...

    触发器中两个临时表详解.pdf

    触发器中两个临时表详解 ...inserted 和 deleted 两个临时表在触发器中起着重要的作用,通过它们可以精确地确定触发器的动作对数据表所做的修改,并且可以用于触发器的条件测试。但是,用户不能直接更改它们的内容。

    SQL级联触发器之deleted课件

    - deleted和inserted表的区别与使用场景。 - 示例代码和案例研究。 - 性能考虑和最佳实践。 6. **最佳实践** - 避免过度使用级联触发器,以免导致不必要的复杂性。 - 在使用deleted表时,注意不要对它进行...

    与SQL Server 2000触发器相关的二个临时表的辨析.pdf

    在讨论SQL Server 2000中的触发器时,我们通常会涉及两个特殊的临时表:inserted和deleted。这两个临时表在触发器的执行过程中扮演了非常重要的角色,尤其是在处理数据的插入、更新和删除操作时。在触发器的上下文中...

    使用SQL Server触发器实现数据表的级联更新.pdf

    在实际应用中,SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表,当触发器被执行时产生。这是两个逻辑表,存放在内存中,表的结构与被触发器作用的表的结构相同且由系统自动创建和撤销。 使用...

    sql server TRIGGER与逻辑表INSTERED 和 DELETED

    在DML触发器内部,逻辑表INSERTED和DELETED是两个特殊的表,它们仅在触发器的上下文中可用。它们用于存储触发器操作影响的行数据。 INSERTED表 INSERTED表在INSERT或UPDATE触发器中用来存储触发操作后的新行数据。...

    利用SQL Server触发器实现表的历史修改痕迹记录

    SQL Server为每个触发器都创建了两个专用虚拟表:inserted表和deleted表。这两个表由系统来维护,他们存在于内存中,而不是在数据库中。这两个表的结构总是与被该触发器作用的表结构相同。触发器执行完成后,与该...

    SQL Server中多行数据更新的触发器应用研究.pdf

    在触发器内部,通过计算inserted表和deleted表中学分字段的差值,并结合学生表,来计算每个学生在更新后的总学分,从而保证了数据的准确性和完整性。 文章还指出了多行数据更新引发的触发器设计比单条记录更新时...

    SQL Server 利用触发器对多表视图进行更新的实现方法

    - 示例中通过`INSERT INTO`语句向`XINXIN_TAB`和`FENSHU_TAB`插入数据,确保了各个表中有数据可供触发器操作。 6. **视图与多表更新**: - 虽然未直接提及视图,但视图可以结合触发器用于实现多表操作。视图是...

    sqlserver触发器例子

    SQL Server为每个触发器创建了两个特殊的表——Inserted表和Deleted表。这两个表由系统维护,并且只存在于内存中,而不是数据库中。这两个表的结构与触发器作用的表结构完全相同。 - **Deleted 表**:存储由于执行...

    SQL心得体会

    在本文中,我们将深入探讨两个与触发器紧密相关的临时表——Inserted和Deleted,以及如何利用它们来实现数据的跟踪和备份。 Inserted表和Deleted表是在触发器执行期间创建的隐式内部表,它们仅在触发器的上下文中...

    如何使用Microsoft SQL Server 2000中的逻辑表.pdf

    例如,可以在学生表(Student)中定义一个修改触发器,当对表中记录进行修改时,触发器会被激活并显示学生表、inserted表和deleted表中的所有记录。通过触发器,可以详细查看到修改前后的数据差异。 在另外一个应用...

    利用SQLServer触发器实现表跟踪.pdf

    触发器的执行过程中,SQL Server 会维护两个虚拟表,分别是Inserted表和Deleted表。这两个表在触发器被触发时存在,用以存储操作所涉及的数据。具体而言,Deleted表存储的是被DELETE或UPDATE语句影响的行的副本,即...

    SQL_Server触发器创建、删除、修改、查看示例教程.doc

    SQL Server 为每个触发器都创建了两个专用表:Inserted 表和 Deleted 表。这两个表由系统来维护,它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行完成后,与该...

    有关数据库触发器的实例

    在这个示例中,`Deleted`和`Inserted`是SQL Server为每个触发器操作创建的两个临时表。`Deleted`表保存了在操作前的旧记录,而`Inserted`表则包含了操作后的新记录。在UPDATE操作中,`Deleted`表和`Inserted`表都有...

    浅谈SQL Server 2000触发器.pdf

    在SQL Server中,每个触发器执行期间,系统会创建两个特殊的逻辑表:inserted表和deleted表。这些表用于存储被触发器操作影响的行的副本。具体作用如下: - Inserted表:在执行INSERT或UPDATE操作时,新的行会同时...

    数据库触发器

    - 触发器可以通过比较`deleted`表和`inserted`表中的数据来判断哪些字段发生了改变,并据此执行相应的操作。 - `deleted`和`inserted`表中的行都是目标表中对应行的副本,这样可以方便地访问更改前后的数据。 **3. ...

    SQL sever SQL触发器的介绍及入门

    Deleted 和 inserted 表总是在内存中。触发器所引用的其它表的位置确定操作所需的时间。因此,应该避免在触发器中使用游标,而是使用基于行集的逻辑来设计影响多行的触发器。 Inserted 和 Deleted 表 Inserted 和 ...

Global site tag (gtag.js) - Google Analytics