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

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

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

問題描述

當(dāng)我嘗試驗證以下內(nèi)容時,我遇到了一個 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ā)票編號不存在,它仍然會引發(fā)此錯誤.我想是因為它已經(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.

我的問題是有沒有辦法重寫這個過程以使其正常工作?也許先執(zhí)行 SELECT 并進行驗證檢查,如果沒問題,然后開始在事務(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?

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

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

<小時>

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(從逗號或管道運算符字符串中刪除重復(fù)項)
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)
主站蜘蛛池模板: 亚洲精品电影 | 日日干日日色 | 成人在线观看免费视频 | 成人性视频免费网站 | 欧美日韩精品一区二区三区四区 | 国产日韩欧美在线 | 国产一区二 | 国产伦精品 | 精品亚洲一区二区三区 | 久在线观看 | av电影一区二区 | 亚洲国产精品久久久久 | 日韩福利视频 | 国产高清在线精品一区二区三区 | 黄色成人av | 日本天天操 | av先锋资源 | 成人黄色电影在线播放 | 粉嫩粉嫩芽的虎白女18在线视频 | 日本在线观看网址 | 91精品久久久久久久久 | 欧美日本免费 | 亚洲国产成人av好男人在线观看 | 97精品超碰一区二区三区 | 欧美成人一区二区三区 | 羞羞视频网站在线观看 | 国产区在线观看 | 红桃成人在线 | 精品久久国产老人久久综合 | 久久亚洲国产 | 久久精品免费 | 亚洲一区在线日韩在线深爱 | www..99re| 欧美日韩中文在线 | a久久| 国产精品久久国产精品久久 | 久久久久香蕉视频 | 欧美国产中文 | 91精品一区 | 国产精品久久久久久久久久久新郎 | 丁香五月网久久综合 |