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

重寫過程以避免插入然后回滾

Rewriting a proc to avoid an insert then rollback(重寫過程以避免插入然后回滾)
本文介紹了重寫過程以避免插入然后回滾的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

當(dāng)我嘗試驗(yàn)證以下內(nèi)容時(shí),我遇到了一個(gè) proc 問題:

i am having an issue with a proc where when I try to validate the following:

  • @invoicenumber + @invoiceid 連接在一起使總發(fā)票號碼

  • @invoicenumber + the @invoiceid concatenate together to make the overall Invoicenumber

如果數(shù)據(jù)庫中已存在總發(fā)票編號,則拋出發(fā)票
號碼已存在'.

if overall invoicenumber already exists in database, throw 'Invoice
Number already exists'.

我遇到的問題是,即使發(fā)票編號不存在,它仍然會(huì)引發(fā)此錯(cuò)誤.我想是因?yàn)樗呀?jīng)插入了數(shù)據(jù),但插入后又回滾了,所以雖然看起來沒有插入表中,但它可能已經(jīng)插入了,或者我是這么認(rèn)為的.

The problem I am having is that even if the invoice number doesn't exist, it still throws this error. I think it is because it has inserted the data but is then rolledback after the insert, so though it looks like it's not inserted into the table, it may have already been inserted, or that's what I believe.

我的問題是有沒有辦法重寫這個(gè)過程以使其正常工作?也許先執(zhí)行 SELECT 并進(jìn)行驗(yàn)證檢查,如果沒問題,然后開始在事務(wù)中執(zhí)行插入?

My question is that is there a way to re-write this proc to get it working correctly? Maybe perform a SELECT first and do the validation checks and if that's ok then start performing the insert within the transaction?

被這個(gè)問題困住了一段時(shí)間,想看看是否有更有效的方法可以避免這個(gè)問題?

Been stuck on this issue for a while so like to see if there is a much more efficent way to see if this problem can be avoided?

下面是proc和exec:

Below is the proc and exec:

exec SupportAudit.BI.CreateMCCInvoiceReversal 'ABCD/000', 29923, 'ABC', 1

<小時(shí)>

USE [SupportAudit]
GO
/****** Object:  StoredProcedure [BI].[CreateMCCInvoiceReversal]    Script Date: 29/08/2016 07:23:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER Procedure [BI].[CreateMCCInvoiceReversal]
(

    @InvoiceNumber      varchar(255),
    @InvoiceID          int,
    @DocType            varchar(15),
    @TaskLogid          int

)

AS

BEGIN

SET NOCOUNT ON;
SET XACT_ABORT ON;

declare @OutputList         [Core].[RollbackOutputList];
declare @procname           sysname; 


Set @procname = OBJECT_NAME(@@ProcID)


BEGIN TRY

BEGIN TRAN MCCInvoiceReversal

        INSERT INTO [Jet2Fees].Discount.Invoice
                (
                InvoiceNumber,
                DocType,
                )

        OUTPUT '[Jet2Fees].Discount.Invoice', 'InvoiceID', inserted.InvoiceId,
                                Core.insXMLFragment('InvoiceId')+Core.addnlXMLFragment('InvoiceId', inserted.InvoiceId)


            INTO @OutputList

            SELECT CONCAT(@InvoiceNumber, cast(InvoiceID as varchar(50))),
                    @DocType,

            FROM Jet2Fees.Discount.Invoice
            WHERE InvoiceId = @InvoiceId

    -- see if invoice number already exisits
if exists (select 1 from Jet2Fees.Discount.Invoice where InvoiceNumber = CONCAT(@InvoiceNumber, cast(@InvoiceID as varchar(50))))
            BEGIN;
                ROLLBACK TRAN MCCInvoiceReversal
                set @errormsg = 'Invoice Number already exists';
                THROW 99999, @errormsg, 1
            END;

exec Core.insertRollbackXML @outputList, @TaskLogid, @procname

COMMIT TRANSACTION MCCInvoiceReversal


END TRY

推薦答案

修改您的 TRY 塊,如下所示..

Modify your TRY block like below..

BEGIN TRY


IF exists (select 1 from Jet2Fees.Discount.Invoice where InvoiceNumber = CONCAT(@InvoiceNumber, cast(@InvoiceID as varchar(50))))
            BEGIN;
                set @errormsg = 'Invoice Number already exists';
                THROW 99999, @errormsg, 1
            END
ELSE 

     BEGIN
        INSERT INTO [Jet2Fees].Discount.Invoice
                (
                InvoiceNumber,
                DocType
                )

        OUTPUT '[Jet2Fees].Discount.Invoice', 'InvoiceID', inserted.InvoiceId,
                                Core.insXMLFragment('InvoiceId')+Core.addnlXMLFragment('InvoiceId', inserted.InvoiceId)


            INTO @OutputList

            SELECT CONCAT(@InvoiceNumber, cast(InvoiceID as varchar(50))),
                    @DocType
            FROM Jet2Fees.Discount.Invoice
            WHERE InvoiceId = @InvoiceId
          END

END TRY

這篇關(guān)于重寫過程以避免插入然后回滾的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(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(從逗號或管道運(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)
主站蜘蛛池模板: 亚洲精品在线免费 | 国产女人与拘做受视频 | 久久久久国产精品免费免费搜索 | 久久99视频免费观看 | 日韩精品一区二区三区中文在线 | 国产精品日韩 | 亚洲国产成人精品久久久国产成人一区 | 亚洲欧美日韩电影 | 91影院 | 久久国产精彩视频 | 国产日韩欧美精品一区二区三区 | 国产区在线观看 | 欧美激情一区 | 丝袜一区二区三区 | 96国产精品久久久久aⅴ四区 | 伊人二区| 欧美一级观看 | 全部免费毛片在线播放网站 | 五月激情六月婷婷 | 亚洲图片一区二区三区 | 日韩在线欧美 | 毛片久久久 | 日本激情视频网 | 日韩网站免费观看 | 天天搞夜夜操 | 日本在线看片 | 狠狠综合久久av一区二区老牛 | 五月天天色 | av在线一区二区三区 | www.黄色在线观看 | 91国语清晰打电话对白 | 亚洲高清在线 | 国产网站在线播放 | 美女视频一区 | 中文字幕av一区 | 365夜爽爽欧美性午夜免费视频 | 国产视频一区二区 | 国产一区二区精品在线 | 在线观看国产视频 | 午夜在线 | 成人小视频在线观看 |