久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

如何在 SQL Server 的嵌套過(guò)程中處理事務(wù)?

How to handle Transaction in Nested procedure in SQL server?(如何在 SQL Server 的嵌套過(guò)程中處理事務(wù)?)
本文介紹了如何在 SQL Server 的嵌套過(guò)程中處理事務(wù)?的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

我有 2 個(gè) proc,即 Proc1 和 Proc2.我在 proc2 中執(zhí)行 proc1.兩個(gè)程序中都有多個(gè) DML 操作.proc1 的輸出在 proc2 中用于 DML 操作.如果在 proc2 中發(fā)生錯(cuò)誤,則如何在兩個(gè) proc 中處理事務(wù)以回滾所有 DML 操作?

I have 2 proc i.e. Proc1 and Proc2. I am executing proc1 inside proc2. There are multiple DML operation in both procedure. output of proc1 is used in proc2 for DML operation. if Error occurred in proc2 then how to handle transaction in both proc for rollback all DML operation?

我應(yīng)該在兩個(gè) proc 中都寫事務(wù)嗎?

Should I write transaction in both proc?

推薦答案

我們使用基于 http://www.sommarskog.se/error_handling/Part1.html 我們 - 在適用時(shí) - 包括在我們的(嵌套)交易中以確保鏈得到正確管理:

We use a generic error handler procedure based on http://www.sommarskog.se/error_handling/Part1.html that we - when applicable - include in our (nested) transactions to ensure the chain is managed properly:

CREATE PROCEDURE [dbo].[sp_ErrorHandler](@caller VARCHAR(255))
AS BEGIN
    SET NOCOUNT ON;
    DECLARE @errmsg NVARCHAR(2048), @severity TINYINT, @state TINYINT, @errno INT, @lineno INT;
    SELECT @errmsg=REPLACE(ERROR_MESSAGE(), 'DatabaseException: ', 'DatabaseException: '+QUOTENAME(@caller)+' --> ')
         , @severity=ERROR_SEVERITY()
         , @state=ERROR_STATE()
         , @errno=ERROR_NUMBER()
         , @lineno=ERROR_LINE();
    IF @errmsg NOT LIKE 'DatabaseException%' BEGIN
        SELECT @errmsg=N'DatabaseException: '+QUOTENAME(@caller)+N', Line '+LTRIM(STR(@lineno))+N', Error '+LTRIM(STR(@errno))+N': '+@errmsg;
    END;
    RAISERROR('%s', @severity, @state, @errmsg);
END;

(在主庫(kù)中編譯并標(biāo)記為系統(tǒng)程序)

(Compiled in the master database and marked as system procedure)

我們使用這個(gè)錯(cuò)誤處理程序如下.在演示中,我有一個(gè)外部 proc 和一個(gè)內(nèi)部 proc 都使用事務(wù).

We use this error handler as follows. In the demo I have an outer proc and an inner proc both using a transaction.

CREATE PROCEDURE dbo.uspOuterProc
AS
  BEGIN
  SET NOCOUNT, XACT_ABORT ON;

  BEGIN TRY
  BEGIN TRANSACTION;

  EXEC dbo.uspInnerProc;

  PRINT 1;

  COMMIT;
  END TRY
  BEGIN CATCH
  IF @@trancount > 0
  ROLLBACK TRANSACTION;

  EXEC master.dbo.sp_ErrorHandler @caller = 'dbo.uspOuterProc';
  END CATCH;
  END;
GO

CREATE PROCEDURE dbo.uspInnerProc
AS
  BEGIN
  SET NOCOUNT, XACT_ABORT ON;

  BEGIN TRY
  BEGIN TRANSACTION;

  PRINT 2;

  SELECT 1 / 0;

  PRINT 3;

  COMMIT;
  END TRY
  BEGIN CATCH
  IF @@trancount > 0
  ROLLBACK TRANSACTION;

  EXEC master.dbo.sp_ErrorHandler @caller = 'dbo.uspInnerProc';
  END CATCH;
  END;
GO

編譯并運(yùn)行后:

EXEC dbo.uspOuterProc

你應(yīng)該得到這個(gè)結(jié)果:

2

Msg 50000, Level 16, State 1, Procedure sp_ErrorHandler, Line 13 [Batch Start Line 48]
DatabaseException: [dbo.uspOuterProc] --> [dbo.uspInnerProc], Line 12, Error 8134: Divide by zero error encountered.

這篇關(guān)于如何在 SQL Server 的嵌套過(guò)程中處理事務(wù)?的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

Modify Existing decimal places info(修改現(xiàn)有小數(shù)位信息)
The correlation name #39;CONVERT#39; is specified multiple times(多次指定相關(guān)名稱“CONVERT)
T-SQL left join not returning null columns(T-SQL 左連接不返回空列)
remove duplicates from comma or pipeline operator string(從逗號(hào)或管道運(yùn)算符字符串中刪除重復(fù)項(xiàng))
Change an iterative query to a relational set-based query(將迭代查詢更改為基于關(guān)系集的查詢)
concatenate a zero onto sql server select value shows 4 digits still and not 5(將零連接到 sql server 選擇值仍然顯示 4 位而不是 5)
主站蜘蛛池模板: 日韩精品久久一区二区三区 | 91资源在线 | 亚洲看片网站 | 91在线一区 | 欧美a在线 | 夜夜爽99久久国产综合精品女不卡 | 成人午夜免费福利视频 | caoporon| 韩国av网站在线观看 | 成人精品视频在线观看 | xxx.在线观看 | 国产精品完整版 | 成人av免费在线观看 | 久久99国产精品 | 成人av观看| 欧美亚洲视频在线观看 | 91精品国产欧美一区二区 | 久久激情视频 | 免费a网站 | 久久国内精品 | 丝袜毛片 | 精品一区二区三区免费视频 | 四虎永久免费影院 | 中国大陆高清aⅴ毛片 | 三级成人在线 | 午夜精品久久久久久久久久久久久 | 欧美一区免费在线观看 | 久久国产精品久久 | 国产免费拔擦拔擦8x高清 | 粉嫩一区二区三区性色av | 精品国产亚洲一区二区三区大结局 | 夜夜爽99久久国产综合精品女不卡 | 精久久久 | 一a一片一级一片啪啪 | 日韩第一页 | 亚洲三区视频 | 国产精品高潮呻吟久久 | 精品久久久久一区二区国产 | 日本电影韩国电影免费观看 | 国产成人免费 | 精品日韩在线 |