SQL 临时表INSERTED和DELETED
2012-07-25 10:34
393 查看
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 |
相关文章推荐
- Inserted和Deleted sql
- Inserted和Deleted sql
- SQL 中的两个逻辑表,inserted和deleted表
- sqlserver在触发器中执行动态sql用到inserted(deleted)表
- sqlserver在触发器中执行动态sql用到inserted(deleted)表
- EXEC(EXECUTE)函数访问INSERTED或DELETED的内部临时触发表
- sql 存储过程 临时表和游标的使用
- SQL查询SQLSERVER数据库中的临时表结构脚本
- SQL 建个临时表,帮你解决很多事
- SQL Server中临时表与表变量的区别
- ISNULL函数,转换函数:cast和convert,Merge的用法,INSERTED/DELETED使用,select赋值
- 【SQL Server】 SQL使用和删除临时表
- SQL SERVER 的INSERTED DELETED 两张表
- sql的临时表使用小结
- deleted和inserted是逻辑(概念)表。
- sql: 临时表与表变量的区别
- SQL本地临时表EXEC问题
- 触发器中的inserted和deleted表
- SQL Server中临时表与表变量的区别
- 【T-SQL系列】临时表、表变量