加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql-server-2008 – SQL Server – 插入/插入后 – 回滚

发布时间:2020-12-12 08:22:36 所属栏目:MsSql教程 来源:网络整理
导读:我有以下触发器: CREATE Trigger instructor_expertise on CourseSections After Insert As Begin ...... If (Not Exists(Select AreaName From AreasOfInstructor Where (InstructorNo = @InstructorNo AND AreaName = @AreaName))) Begin RAISERROR('Cours
我有以下触发器:
CREATE Trigger instructor_expertise on CourseSections
     After Insert
     As Begin
     ......

     If (Not Exists(Select AreaName From AreasOfInstructor Where (InstructorNo = @InstructorNo AND AreaName = @AreaName))) 
     Begin 
     RAISERROR('Course not in instructors expertise',16,1)
     rollback transaction  
     End
     GO

我的问题是,“回滚交易”是否删除了行?
如果它是’For Insert’,那么’回滚事务’会删除该行中的行吗?

谢谢!!!

解决方法

您的INSERT语句始终在事务中运行 – 您已经明确定义了一个,如果没有,那么SQL Server将使用隐式事务.

您正在向表中插入一行(或多行).然后 – 仍在事务内部 – AFTER INSERT触发器运行并检查某些条件 – 通常使用触发器内可用的Inserted伪表,其中包含已插入的行.

如果你在你的触发器中调用ROLLBACK TRANSACTION,那么是 – 你的事务,它正在做的所有事情都被回滚,就好像INSERT从未发生过 – 没有任何东西出现在你的数据库表中.

另外:FOR INSERT与SQL Server中的AFTER INSERT相同 – 触发器在INSERT语句完成其工作后执行.

要记住一件事(很多程序员都会出错):每批触发一次触发器 – 每行不会触发一次!因此,如果一次插入20行,则触发器将触发一次,触发器内的Inserted伪表包含20行.在编写触发器时,您需要考虑到这一点 – 您并不总是处理插入的单行!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读