标签:
在存储过程的编写中难免会遇到调用同库他人的proc和跨库调用proc,还有一个proc中有多条对多表进行写入和修改的语句。那么就会用到tran。
如果我们在不写try的情况下就要对每个insert,update的后面写上
IF @@error <> 0 OR @@Rowcount = 0 BEGIN ROLLBACK TRAN END
来确保所有语句的正常执行和有影响的行数。
而在写了try的情况下,我们就可规范一下写法,利用RAISERROR
DECLARE @Ret_Msg VARCHAR(200) DECLARE @Ret_Msg1 VARCHAR(200) DECLARE @nResult INT DECLARE @vcResult VARCHAR(200) BEGIN TRY BEGIN TRAN UPDATE Table_a set a=1 WHERE b =1 IF @@Rowcount = 0 BEGIN SET @Ret_Msg = ‘执行失败‘ SET @Ret_Msg1 = ‘Table_a 更新失败‘ RAISERROR(@Ret_Msg1,16,1) END 数据库.架构.proc 1,2, @nResult OUT, @vcResult OUT IF @nResult <0 BEGIN SET @Ret_Msg = @vcResult SET @Ret_Msg1 = ‘dbLink调用失败‘ + @vcResult RAISERROR(@Ret_Msg1,16,1) END SELECT @Ret_Msg as vcResult COMMIT TRAN END TRY BEGIN CATCH IF @@tranCount > 0 ROLLBACK TRAN; SELECT @Ret_Msg AS vcResult END CATCH
当结果不是我们想要的就RAISERROR抛个错误,让CATCH处理
sql 关于dblink和多条update、insert事务回滚写法
标签:
原文地址:http://www.cnblogs.com/ghelement/p/5387375.html