导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

关于触发器的比较菜的问题

884813 2002-12-31 09:03:45
1.对于delete表和insert表来说,若delete语句和insert语句影响了多个行,那么delete表和insert表中是存在对应于操作的多个行,还是只存在当前被删除或插入的行?(比如delete table_name where ...语句删除了N行,那么是否delete表中就会有那n行被删除的记录?)
2.如何引用当前被影响的行?(比如在表中的记录被删除的时候,把对应于此条被删除的记录的另外一个表中的记录删除,怎么干呢?)
...全文
7 点赞 收藏 11
写回复
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
update是用两个表:inserted和deleted
将要修改的记录,先删除,在deleted表中;
然后再插入修改后的记录,放在inserted表中。
select * from tablename where id = inserted.id
回复
KnowLittle 2002-12-31
Deleted 表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted 表中。Deleted 表和触发器表通常没有相同的行。

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

更新事务类似于在删除之后执行插入;首先旧行被复制到 deleted 表中,然后新行被复制到触发器表和 inserted 表中。
回复
884813 2002-12-31
是否这样在update的时候,sqlserver先把这些记录删除,更新之后再插入到表中?
回复
happydreamer 2002-12-31
insert时 可以用select from inserted
delete时 可以用select from deleted 看出影响的结果
回复
pengdali 2002-12-31
楼上有updated表吗?????????????

update 另一个表 set 另一个表.value=inserted.value from inserted where 另一个表.id=inserted.id
回复
pengdali 2002-12-31
update 另一个表 set 另一个表.value=deleted.value from deleted where 另一个表.a=deleted.a
回复
hjhing 2002-12-31
用 updated 表啊
回复
pengdali 2002-12-31
1.多个行
insert 另一个表 select * from inserted
可以看出
2.delete 另一个表 from 另一个表,deleted where deleted.id=另外一个表.id
或 delete from 另一个表 where 另一个表.id in (select id from deleted)
或 delete from 另一个表 where exists (select 1 from deleted where deleted.id=另一个表.id)

回复
884813 2002-12-31
谢谢先!
关于我的第二个问题,针对insert操作和delete操作,我们可以引用delete表和额insert表,但是若是update操作,如何引用被update过的行呢?
回复
1、多行
2、可以:
delete 另外一个表 from 另外一个表,deleted where deleted.id=另外一个表.id
回复
ttyp 2002-12-31
1.是的,有N条
2.用连接或子查询 delete from t where t.id in (select id from deleted)
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告