1

複数のテーブルを挿入するときにトランザクションを処理するためのSPを作成しましたが、以下の例外が発生します

私のSP

ALTER PROCEDURE [dbo].[usp_Insert_BankData]
@xmlBankItems   XML ,
@xmlAccDetails XML,
@xmlPosition XML
AS
BEGIN
SET NOCOUNT ON;

DECLARE @TranStarted   bit
SET @TranStarted = 0

    IF( @@TRANCOUNT = 0 )
        BEGIN
            BEGIN TRANSACTION
            SET @TranStarted = 1
        END
    ELSE
        SET @TranStarted = 0

    INSERT INTO BankItem([BankItemId],[PortfolioId],[ItemIdentifier],[ItemDisplayName])
    SELECT  r.value('BankItemId[1]','uniqueidentifier'),r.value('PortfolioId[1]','uniqueidentifier'),
            r.value('ItemIdentifier[1]','bigint'),r.value('ItemDisplayName[1]','varchar(150)')
    FROM @xmlBankItems.nodes('bankItem') t(r)


    INSERT INTO BankAccountDetails (BankAccountId,BankItemId, AccountName,AccountDescription)
                    SELECT ac.value('BankAccountId[1]','uniqueidentifier'),ac.value('BankItemId[1]','uniqueidentifier'),
                            ac.value('AccountName[1]','varchar(150)'),ac.value('AccountDescription[1]','varchar(50)')
                    FROM @xmlAccDetails.nodes('accDetail') t(ac) 

    INSERT INTO Positions(PositionId,BankItemId,AccountCode,Ticker)
                    SELECT  p.value('PositionId[1]','uniqueidentifier'),p.value('BankItemId[1]','uniqueidentifier'),
                            p.value('AccountCode[1]','bigint'),p.value('Ticker[1]','varchar(50)')
                    FROM @xmlPosition.nodes('position') t(p) 

    IF( @@ERROR <> 0 )
        GOTO Cleanup

     IF( @TranStarted = 1 )
        BEGIN
            SET @TranStarted = 0
            COMMIT TRANSACTION
        END

    Cleanup:
        IF( @TranStarted = 1 )
        BEGIN
            SET @TranStarted = 0
            ROLLBACK TRANSACTION
        END
END

- - - - - - - - -例外 - - - - - - - -

Violation of PRIMARY KEY constraint 'PK_BankAccountItems'. Cannot insert duplicate key in object 'dbo.BankItem'. The duplicate key value is (4bb6e35b-900b-4d0c-890e-48944abfe976).
Violation of PRIMARY KEY constraint 'PK_BankData_1'. Cannot insert duplicate key in object 'dbo.BankAccountDetails'. The duplicate key value is (952d89d6-bd3b-4408-b00d-644ab15ee9c0).
Violation of PRIMARY KEY constraint 'PK_Positions'. Cannot insert duplicate key in object 'dbo.Positions'. The duplicate key value is (4d030b2e-fbf3-40b7-9ae4-ab0aeb2138f0).
The statement has been terminated.
The statement has been terminated.
The statement has been terminated.
4

1 に答える 1

0

問題は、エラーに記載されているテーブルに重複データがすでに存在していることのようです。エラーは、違反しているキー値を示します。これらのキーについてテーブルをクエリします。キーが存在する場合、挿入は失敗し、トランザクションはそれを支援しません。

于 2013-01-31T04:58:23.103 に答える