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 我的问题是,“回滚交易”是否删除了行? 谢谢!!! 解决方法您的INSERT语句始终在事务中运行 – 您已经明确定义了一个,如果没有,那么SQL Server将使用隐式事务.您正在向表中插入一行(或多行).然后 – 仍在事务内部 – AFTER INSERT触发器运行并检查某些条件 – 通常使用触发器内可用的Inserted伪表,其中包含已插入的行. 如果你在你的触发器中调用ROLLBACK TRANSACTION,那么是 – 你的事务,它正在做的所有事情都被回滚,就好像INSERT从未发生过 – 没有任何东西出现在你的数据库表中. 另外:FOR INSERT与SQL Server中的AFTER INSERT相同 – 触发器在INSERT语句完成其工作后执行. 要记住一件事(很多程序员都会出错):每批触发一次触发器 – 每行不会触发一次!因此,如果一次插入20行,则触发器将触发一次,触发器内的Inserted伪表包含20行.在编写触发器时,您需要考虑到这一点 – 您并不总是处理插入的单行! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |