一个事物控制的小问题
BEGIN TRANSACTION
insert table1--这一句OK
insert table2--执行这一句出错
IF @@ERROR>0
BEGIN
ROLLBACK
END
ELSE
COMMIT
我希望是insert table2出错的话,把insert table1也回滚回去,请问下怎么修改上面的事物控制语句呢?
------解决方案--------------------这么写好像能达到你的要求
------解决方案--------------------
create TABLE tb1 (id INT,col VARCHAR)
create TABLE tb2 (id INT,col2 VARCHAR)
BEGIN TRANSACTION
insert INTO tb1(id,col) SELECT 1,'a'
insert INTO tb2(id,col2) SELECT 'b',3
IF @@ERROR>0
BEGIN
ROLLBACK
END
ELSE
COMMIT
SELECT * FROM tb1
SELECT * FROM tb2
lz写的这个就OK哦。
------解决方案--------------------
改用try ...catch...
具体语法查看联机丛书
------解决方案--------------------自05以后,添加了try catch语句,比@@error更灵活,更方便
@@error这个我一直觉得与事务一起,起的作用不大,因为如果一旦错误的级别高了,会引起进程中断,中断后,后面的语句都执行不了了
而try catch可以有效防止一些高级别的错误中断