sql事务处理为什莫会成功?

zjrkif 2006-03-13 06:35:44
表1名:class
字段:classid、classname

表2名stud
字段:studid、studname、studsex、studclass

表1与表2
建立关系classid(主键) studclass(外键)

语句:
BEGIN TRAN
INSERT INTO stud VALUES('001','李逍遥','男','1229')
INSERT INTO class VALUES('1229','二期')
IF @@error>0
BEGIN
ROLLBACK TRAN
END
ELSE
BEGIN
COMMIT TRAN
END

经测试insert语句会获得错误547 事务应该会回滚得,可是class表的数据却会更新成功。

将两个insert语句顺序颠倒测试:
BEGIN TRAN
INSERT INTO class VALUES('1229','二期')
INSERT INTO stud VALUES('001','杜明君','男','1229')
IF @@error>0
BEGIN
ROLLBACK TRAN
END
ELSE
BEGIN
COMMIT TRAN
END
将第一个insert语句改为:INSERT INTO classaad VALUES('1229','二期')
测试会发生回滚
但如果第一句不变
将第二个insert语句改为:INSERT INTO studasd VALUES('001','杜明君','男','1229')
测试,不会发生回滚,class表数据插入成功。

这是为什莫?请高手指点小弟。
...全文
80 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
WangZWang 2006-03-13
  • 打赏
  • 举报
回复
SET XACT_ABORT ON
BEGIN TRAN
INSERT INTO stud VALUES('001','李逍遥','男','1229')
INSERT INTO class VALUES('1229','二期')
IF @@error>0
BEGIN
ROLLBACK TRAN
END
ELSE
BEGIN
COMMIT TRAN
END

-- or

BEGIN TRAN
INSERT INTO stud VALUES('001','李逍遥','男','1229')
IF @@error>0 goto errorLab
INSERT INTO class VALUES('1229','二期')
IF @@error=0
begin
COMMIT TRAN
return
end
errorLab :
ROLLBACK TRAN


zjcxc 2006-03-13
  • 打赏
  • 举报
回复
@@error返回上一条语句是否出错

按楼主原来的处理, 第1条语句出错, 那么第2条语句依然会被执行的, 第2条语句的执行是否成功就覆盖了@@error的值, 所以第2条语句后面的判断只能判断第2条语句是否出错.
zjcxc 2006-03-13
  • 打赏
  • 举报
回复
BEGIN TRAN
INSERT INTO stud VALUES('001','李逍遥','男','1229')
-----------------------------------------------------加上
IF @@error>0
BEGIN
ROLLBACK TRAN
return
END


INSERT INTO class VALUES('1229','二期')
IF @@error>0
BEGIN
ROLLBACK TRAN
END
ELSE
BEGIN
COMMIT TRAN
END
WangZWang 2006-03-13
  • 打赏
  • 举报
回复
SET XACT_ABORT ON
BEGIN TRAN
INSERT INTO stud VALUES('001','李逍遥','男','1229')
INSERT INTO class VALUES('1229','二期')
IF @@error>0
BEGIN
ROLLBACK TRAN
END
ELSE
BEGIN
COMMIT TRAN
END

-- or

BEGIN TRAN
INSERT INTO stud VALUES('001','李逍遥','男','1229')
IF @@error>0
ROLLBACK TRAN
ELSE
COMMIT TRAN
INSERT INTO class VALUES('1229','二期')
IF @@error>0
ROLLBACK TRAN
ELSE
COMMIT TRAN

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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