sql 关于dblink和多条update、insert事务回滚写法

在存储过程的编写中难免会遇到调用同库他人的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处理

上一篇:八、mysql视图、存储过程、函数以及时间调度器


下一篇:微信公众平台C# SDK:Senparc.Weixin.MP.dll