请教一个简单的关于触发器里的用词问题,谢谢。

blackfiles 2003-05-13 12:59:23
我在前面的帖子里看到有人给的例子:
create table 表 (a int)
go
insert 表 values (1)
go
CREATE TRIGGER 名 ON 表
FOR UPDATE
AS
select a 更新前被删除的数据 from deleted
select a 更新后被插入的数据 from inserted
go
请问,这里的 from deleted ,from inserted ,指的是什么??应该怎样理解这两句话?谢谢
...全文
45 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
magnetmoon 2003-05-13
1.
如果我同时在触发器中UPDATE了10条记录,那么在这两个临时表中,保存的记录复本有几条啊??
答:10条
2.
还有,这两个临时表中,是否有字段名呢??
答:有
3.是否具备我在触发器里要UPDATE的记录的字段名呢?
答:具备
4.
能否用inserted.filedname 这样的引用??
答:能
回复
iainet 2003-05-13
不是啊,比如你可以一次在一个表里操作(INSERT,UPDATE。DELETE)多条数据,
这时在临时表里也就有多条数据,但是关于存在多长时间的问题以及存储多少
数据的问题不太清楚!
回复
blackfiles 2003-05-13
意思是不是说,这两个临时表中,只有一条记录,
如果我同时在触发器中UPDATE了10条记录,那么在这两个临时表中,保存的记录复本有几条啊??

还有,这两个临时表中,是否有字段名呢??是否具备我在触发器里要UPDATE的记录的字段名呢?
能否用inserted.filedname 这样的引用??

谢谢
回复
firetoucher 2003-05-13
使用 inserted 和 deleted 表
触发器语句中使用了两种特殊的表:deleted 表和 inserted 表。Microsoft® SQL Server™ 2000 自动创建和管理这些表。可以使用这两个临时的驻留内存的表测试某些数据修改的效果及设置触发器操作的条件;然而,不能直接对表中的数据进行更改。

inserted 和 deleted 表主要用于触发器中:

扩展表间引用完整性。


在以视图为基础的基表中插入或更新数据。


检查错误并基于错误采取行动。


找到数据修改前后表状态的差异,并基于此差异采取行动。
Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。

Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted 表和触发器表中。Inserted 表中的行是触发器表中新行的副本。

更新事务类似于在删除之后执行插入;首先旧行被复制到 deleted 表中,然后新行被复制到触发器表和 inserted 表中。

在设置触发器条件时,应当为引发触发器的操作恰当使用 inserted 和 deleted 表。虽然在测试 INSERT 时引用 deleted 表或在测试 DELETE 时引用 inserted 表不会引起任何错误,但是在这种情形下这些触发器测试表中不会包含任何行。



说明 如果触发器操作取决于一个数据修改所影响的行数,应该为多行数据修改(基于 SELECT 语句的 INSERT、DELETE 或 UPDATE)使用测试(如检查 @@ROWCOUNT),然后采取相应的对策。


SQL Server™ 2000 不允许 AFTER 触发器引用 inserted 和 deleted 表中的 text、ntext 或 image 列;然而,允许 INSTEAD OF 触发器引用这些列。
回复
deleted 和inserted只在触发器中使用。
回复
deleted 和inserted是两个临时表。
前者存放UPDATE要修改的记录,后者是UPDATE修改后的记录。
回复
相关推荐
发帖
MS-SQL Server
创建于2007-09-28

3.3w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
帖子事件
创建了帖子
2003-05-13 12:59
社区公告
暂无公告