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

前端之家收集整理的这篇文章主要介绍了sql-server-2008 – SQL Server – 插入/插入后 – 回滚前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下触发器:
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行.在编写触发器时,您需要考虑到这一点 – 您并不总是处理插入的单行!

原文链接:https://www.f2er.com/mssql/76221.html

猜你在找的MsSQL相关文章