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表数据插入成功。

这是为什莫?请高手指点小弟。
...全文
50 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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

回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2006-03-13 06:35
社区公告
暂无公告