第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

包含嘗試捕獲回滾模式的嵌套存儲(chǔ)過(guò)程?

包含嘗試捕獲回滾模式的嵌套存儲(chǔ)過(guò)程?

慕絲7291255 2019-07-05 12:58:20
包含嘗試捕獲回滾模式的嵌套存儲(chǔ)過(guò)程?我對(duì)以下模式的副作用和潛在問(wèn)題感興趣:CREATE PROCEDURE [Name]ASBEGIN     BEGIN TRANSACTION     BEGIN TRY        [...Perform work, call nested procedures...]     END TRY    BEGIN CATCH        ROLLBACK TRANSACTION         RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]     END CATCHEND據(jù)我所知,該模式在與單個(gè)過(guò)程一起使用時(shí)是合理的-該過(guò)程要么完成其所有語(yǔ)句而沒(méi)有錯(cuò)誤,要么回滾所有操作并報(bào)告錯(cuò)誤。但是,當(dāng)一個(gè)存儲(chǔ)過(guò)程調(diào)用另一個(gè)存儲(chǔ)過(guò)程來(lái)執(zhí)行某個(gè)子單元的工作時(shí)(但有一項(xiàng)了解,即有時(shí)會(huì)單獨(dú)調(diào)用較小的過(guò)程),我看到一個(gè)與回滾有關(guān)的問(wèn)題-發(fā)出一條信息性消息(級(jí)別16),聲明The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION...我認(rèn)為這是因?yàn)樽舆^(guò)程中的回滾總是回滾最外層的事務(wù),而不僅僅是在子過(guò)程中開(kāi)始的事務(wù)。如果發(fā)生任何錯(cuò)誤(并且向客戶(hù)端報(bào)告為SQL錯(cuò)誤),我確實(shí)希望整個(gè)事件回滾并中止,我只是不確定來(lái)自試圖回滾一個(gè)已經(jīng)回滾的事務(wù)的外部層產(chǎn)生的所有副作用。也許是一張支票@@TRANCOUNT在每個(gè)嘗試捕捉層做回滾之前?最后是客戶(hù)端(Linq2SQL),它有自己的事務(wù)層:try{     var context = new MyDataContext();     using (var transaction = new TransactionScope())     {                    // Some Linq stuff         context.SubmitChanges();         context.MyStoredProcedure();         transactionComplete();     }}catch{     // An error occured!}如果存儲(chǔ)過(guò)程“MySubProcedure”調(diào)用內(nèi)MyStoredProcedure會(huì)引發(fā)一個(gè)錯(cuò)誤,我是否可以確保以前在MyStoredProcedure中完成的所有操作都將被回滾,SubmitChanges所做的所有Linq操作都將被回滾,并最終記錄該錯(cuò)誤?或者我需要改變我的模式,以確保整個(gè)操作是原子的,同時(shí)仍然允許單獨(dú)使用子部分(即子過(guò)程應(yīng)該仍然具有相同的原子保護(hù))。
查看完整描述

3 回答

?
墨色風(fēng)雨

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊

這是我們的模板(刪除錯(cuò)誤日志)

這是設(shè)計(jì)用來(lái)處理

解釋?zhuān)?/strong>

  • 所有TXN開(kāi)始和提交/回滾必須配對(duì),以便@@TRANCOUNT在出入境時(shí)是相同的。

  • 不匹配@@TRANCOUNT導(dǎo)致錯(cuò)誤266,因?yàn)?/trans>

    • BEGIN TRAN增量@@TRANCOUNT

    • COMMIT減量@@TRANCOUNT

    • ROLLBACK回報(bào)@@TRANCOUNT降至零

  • 你不能減少@@TRANCOUNT適用于當(dāng)前范圍
    這就是你認(rèn)為的“內(nèi)部交易”

  • SET XACT_ABORT ON取消由不匹配引起的錯(cuò)誤266。@@TRANCOUNT
    也處理像這樣的問(wèn)題“SQLServer事務(wù)超時(shí)”日照

  • 這允許客戶(hù)端txns(如LINQ),單個(gè)存儲(chǔ)過(guò)程可能是分布式或XA事務(wù)的一部分,或者僅僅是在客戶(hù)端代碼(比如.NET TransactionScope)中啟動(dòng)的一個(gè)存儲(chǔ)過(guò)程。

用法:

  • 每個(gè)存儲(chǔ)的proc必須符合相同的模板。

摘要

  • 所以不要?jiǎng)?chuàng)建比你需要的更多的txn

密碼

CREATE PROCEDURE [Name]ASSET XACT_ABORT, NOCOUNT ONDECLARE @starttrancount intBEGIN TRY    SELECT @starttrancount = @@TRANCOUNT    
IF @starttrancount = 0
        BEGIN TRANSACTION

       [...Perform work, call nested procedures...]

    IF @starttrancount = 0 
        COMMIT TRANSACTIONEND TRYBEGIN CATCH    IF XACT_STATE() <> 0 AND @starttrancount = 0 
        ROLLBACK TRANSACTION;
    THROW;
    --before SQL Server 2012 use 
    --RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]END CATCH
GO

注:

  • 回滾檢查實(shí)際上是多余的,因?yàn)?/trans>SET XACT_ABORT ON..然而,它讓我感覺(jué)更好,看上去很奇怪沒(méi)有,并考慮到一些情況下,你不想要它。

  • 魯薩努有一個(gè)相似殼它使用保存點(diǎn)。我更喜歡原子DB調(diào)用,不像他們的文章那樣使用部分更新


查看完整回答
反對(duì) 回復(fù) 2019-07-05
?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊

為了解決返回@AlexKuznetsov所提到的錯(cuò)誤號(hào)和行號(hào)的問(wèn)題,可以這樣引發(fā)錯(cuò)誤:


DECLARE @ErrorMessage NVARCHAR(4000)

DECLARE @ErrorSeverity INT

DECLARE @ErrorState INT

DECLARE @ErrorLine INT

DECLARE @ErrorNumber INT


SELECT @ErrorMessage = ERROR_MESSAGE(),

@ErrorSeverity = ERROR_SEVERITY(),

@ErrorState = ERROR_STATE(),

@ErrorNumber = ERROR_NUMBER(),

@ErrorLine = ERROR_LINE()


RAISERROR (@ErrorMessage, @ErrorSeverity, @ErrorState, @ErrorNumber, @ErrorLine)


查看完整回答
反對(duì) 回復(fù) 2019-07-05
  • 3 回答
  • 0 關(guān)注
  • 483 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)