- 论坛徽章:
- 0
|
目的:
若插入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,马上就出来了。 |
|