免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2863 | 回复: 1
打印 上一主题 下一主题

第一次写事务,请教各位了。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-06-05 19:17 |只看该作者 |倒序浏览
目的:
若插入TABLE1成功,则再插入TABLE2;若插入TABLE2失败,则取消插入TABLE1(即回滚),如下写法有问题吗,并且我要知道到底是那步出错了,好像不可以RETURN 1, RETURN 2?

BEGIN TRANSACTION T1

INSERT INTO TABLE1(NAME) VALUES(\'new\')
IF @@ERROR<>0
        BEGIN
                ROLLBACK TRANSACTION T1
                RETURN  --1
        END
ELSE
        BEGIN
                DECLARE @TID INT
                SELECT @TID=@@IDENTITY
                BEGIN TRANSACTION T2
                        INSERT INTO TABLE2(TID,C1,C2) VALUES(@TID,\'DSEST1\',\'TSFSDF2\')
                        IF @@ERROR<>0
                                BEGIN
                                        ROLLBACK TRANSACTION T1
                                        ROLLBACK TRANSACTION T2
                                        RETURN  --2
                                END
                        ELSE
                                BEGIN
                                        COMMIT TRANSACTION T1
                                        COMMIT TRANSACTION T2
                                END
        END


其实还有一种写法,如下:

BEGIN TRANSACTION

INSERT INTO TABLE1(NAME) VALUES(\'new\')
DECLARE @TID INT
SELECT @TID=@@IDENTITY
INSERT INTO TABLE2(TID,C1,C2) VALUES(@TID,\'DSEST1\',\'TSFSDF2\')
IF @@ERROR<>0
        ROLLBACK TRANSACTION
ELSE
        COMMIT TRANSACTION

但是不能分析到底是那步出错了,并且@@ERROR是不是只能获取最后一条语句的状态?若INSERT TABLE1有错,INSERT TABLE2没有错那@@ERROR是不是就等于0?

另外,为什么我手动打开表时,速度非常慢,记录好久都没有出来,但是我在查询分析器里面SELECT,马上就出来了。

论坛徽章:
0
2 [报告]
发表于 2006-06-05 21:23 |只看该作者
BEGIN TRANSACTION
declare @errornum int
INSERT INTO TABLE1(NAME) VALUES(\'new\')
set @errornum=@@error
if @errornum>0
    print \'第一步错误\'+@errornum
DECLARE @TID INT
SELECT @TID=@@IDENTITY
INSERT INTO TABLE2(TID,C1,C2) VALUES(@TID,\'DSEST1\',\'TSFSDF2\')
IF @@ERROR<>0
ROLLBACK TRANSACTION
ELSE
COMMIT TRANSACTION
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP