標籤:
在預存程序的編寫中難免會遇到調用同庫他人的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 INTDECLARE @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 TRANEND TRYBEGIN CATCH IF @@tranCount > 0 ROLLBACK TRAN; SELECT @Ret_Msg AS vcResult END CATCH
當結果不是我們想要的就RAISERROR拋個錯誤,讓CATCH處理
sql 關於dblink和多條update、insert交易回復寫法