gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 13:33:22 25 4
gpt4 key购买 nike

我有以下触发器:

  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”,在这种情况下“rollback transaction”会删除该行怎么办?

谢谢!!!

最佳答案

您的INSERT语句始终在事务中运行-您已经明确定义了一个事务,否则,SQL Server将使用隐式事务。

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

如果您在触发器中调用ROLLBACK TRANSACTION,那么是的-您的事务以及正在执行的所有操作都会被回滚,就好像该INSERT从未发生过一样-数据库表中没有任何内容。

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

要记住的一件事(很多程序员都会犯错):每个语句触发一次触发器-不是每行一次!因此,如果您一次插入20行,触发器将被触发一次,并且触发器内部的Inserted伪表包含20行。在编写触发器时,您需要考虑到这一点-您是,而不是,始终只处理插入的一行!

关于sql-server-2008 - SQL Server-插入后/插入后-回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13373168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com