在触发器中update是先把记录delete,在inserted,那么在update中处理,是否还会触发insert和deleted

fly_miss 2003-09-12 10:55:00
我在写触发器中要update时,修改其他表的记录,在插入时也要修改其他表的记录,可是在update时,是把原来的记录delete,在插入吗,因为在update时用到了两个表:inserted和deleted
那么是否在update时,还会触发inserted和deleted???
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly_miss 2003-09-12
  • 打赏
  • 举报
回复
谢谢 结贴了
LiaoCheng 2003-09-12
  • 打赏
  • 举报
回复
不会,SQLSERVER自己会处理的!!
zjcxc 元老 2003-09-12
  • 打赏
  • 举报
回复
当然不会.
update的内部处理是删除后新增,但这个过程是内部处理的,不会反应给用户,反应给用户的只有一个update的触发操作.
sjw800614 2003-09-12
  • 打赏
  • 举报
回复
不能!
还用说呀!!!


sysmaster 2003-09-12
  • 打赏
  • 举报
回复
没试过,不过我想一定会触发,要不我UPDATE一个不合要求的数据进去,TIGER还有什么意义!
实验5.1 存储过程的建立与使用 一、实验目的 理解存储过程的概念、作用、建立和调用方法。 二、实验原理 使用CREATE PROCEDURE语句创建存储过程,ALTER PROCEDURE语句修改存储过程,DROP PROCEDURE语句删除存储过程,存储过程有不带参数的、有带输入参数的、有带输出参数(output)的,还可以有带返回值的。创建好的存储过程可以使用EXEC procedure_name语句执行。 实验5.2 触发的建立与使用 一、实验目的 理解触发的概念和作用;了解触发的分类及触发条件;掌握触发的定义及应用。 二、实验原理 1、 使用CREATE TRIGGER语句定义触发,ALTER TRIGGER语句修改触发,DROP TRIGGER语句删除触发。 2、 触发分AFTER/FOR和INSTEAD OF两种类型:AFTER/FOR类型的触发是在相应的触发语句(insertdeleteupdate)执行完后被触发的。如果触发语句对应的表上有完整性约束,这些完整性约束必须不违背时,相应的触发语句才能执行,然后才能触发对应的AFTER/FOR类型的触发。INSTEAD OF类型的触发会在触发语句(insertdeleteupdate)执行之前被触发,并取代相应的触发语句。 3、 在表或视图上,每个INSERTUPDATEDELETE语句只能创建一个INSTEAD OF类型的触发,无法为有外键约束且指定为级联删除或级联修改的表创建DELETEUPDATE语句上的INSTEAD OF 类型的触发。 SQL SERVER为每个触发都创建了两个临时表INSERTED表和DELETED表,这两个表的逻辑结构与被触发作用的表一样,用户可以读取这两个表的内容,但不能对它们进行修改,触发执行完后,这两个表也会自动删除。当执行INSERT时,INSERTED保存要向表插入的所有行;当执行DELETE时,DELETED表保存要从表删除的所有行;当执行UPDATE时,修改前的行保存在DELETED表,修改后的行保存在INSERTED
定义: 何为触发?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发是一个特殊的存储过程。 常见的触发有三种:分别应用于Insert , Update , Delete 事件。 我为什么要使用触发?比如,这么两个表: Create Table Student( --学生表 StudentID int primary key, --学号 .... ) Create Table BorrowRecord( -学生借书记录表 BorrowRecord int identity(1,1), --流水号 StudentID int , --学号 BorrowDate datetime, --借出时间 ReturnDAte Datetime, --归还时间 ... ) 用到的功能有: 1.如果我更改了学生的学号,我希望他的借书记录仍然与这个学生相关(也就是同时更改借书记录表的学号); 2.如果该学生已经毕业,我希望删除他的学号的同时,也删除它的借书记录。 这时候可以用到触发。对于1,创建一个Update触发: Create Trigger truStudent On Student --在Student表创建触发 for Update --为什么事件触发 As --事件触发后所要做的事情 if Update(StudentID) begin Update BorrowRecord Set StudentID=i.StudentID From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted临时表 Where br.StudentID=d.StudentID end 理解触发里面的两个临时的表:Deleted , Inserted 。注意Deleted 与Inserted分别表示触发事件的表“旧的一条记录”和“新的一条记录”。 一个Update 的过程可以看作为:生成新的记录Inserted表,复制旧的记录Deleted表,然后删除Student记录并写入新纪录。

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧