如果记录已经存在,则读取XML并使用存储过程插入SQL表,而不是仅通过存储过程进行插入

如果记录已经存在,则读取XML并使用存储过程插入SQL表,而不是仅通过存储过程进行插入,sql,Sql,我的查询:-在此查询中,仅当再次解析整个XML时,它才会工作,不会插入重复记录,但如果更改XML中3条记录中的1条记录,它将再次插入所有记录,这意味着表中再次出现重复记录,请任何人帮助我如何避免此问题,看起来我需要使用游标或for循环遍历每个记录,请帮助我如何做 这是我的密码 ALTER PROCEDURE [dbo].[SP_XMLtoTABLEInsert] ( @xmlData XML , @retValue varchar(20) OUTPUT ) AS --

我的查询:-在此查询中,仅当再次解析整个XML时,它才会工作,不会插入重复记录,但如果更改XML中3条记录中的1条记录,它将再次插入所有记录,这意味着表中再次出现重复记录,请任何人帮助我如何避免此问题,看起来我需要使用游标或for循环遍历每个记录,请帮助我如何做

这是我的密码

ALTER PROCEDURE [dbo].[SP_XMLtoTABLEInsert] 
(
    @xmlData XML ,
    @retValue varchar(20) OUTPUT
)
AS

    --SET @retValue =NULL;

    DECLARE @PolicyNumber VARCHAR(20) 
    DECLARE @CheckNumber VARCHAR(20) 
    DECLARE @Amount INT 

    SELECT                                                          
        @PolicyNumber=ISNULL(nref.value('PolicyNumber[1]','VARCHAR(50)'),''),                                             
        @CheckNumber=ISNULL(nref.value('CheckNumber[1]','VARCHAR(50)'),''),                                                          
        @Amount=ISNULL(nref.value('Amount[1]','int'),'')                                                                     
    FROM 
        @xmlData.nodes('tma/ tma_body / branchoperator') as R(nref)

    BEGIN
        IF EXISTS (SELECT 1 from [Employee2] where PolicyNumber = @PolicyNumber and CheckNumber = @CheckNumber and Amount = @Amount)
            BEGIN
                SET @retValue='Record Already Exist';
            END

        ELSE IF NOT EXISTS (SELECT 1 from [Employee2] where PolicyNumber = @PolicyNumber and CheckNumber = @CheckNumber and Amount = @Amount)
            BEGIN
                INSERT INTO [Employee2](PolicyNumber,CheckNumber,Amount,Collectiondate,NavDate,VendorName)
                SELECT
                    (R.ref.value('PolicyNumber[1]', 'varchar(20)')) as 'PolicyNumber',
                    R.ref.value('CheckNumber [1]', 'varchar(20)') as ' CheckNumber ',
                    R.ref.value('Amount[1]', 'int') as ' Amount',
                    R.ref.value('Collectiondate [1]', 'date') as ' Collectiondate',
                    R.ref.value('NavDate [1]', 'date') as ' NavDate',
                    R.ref.value('VendorName [1]', 'varchar(100)') as ' VendorName'
                FROM 
                    @xmlData.nodes('tma/ tma_body / branchoperator') as R(ref)

                IF(@@ROWCOUNT > 0 )
                SET @retValue='SUCCESS';
            END
    END

输入XML-

输入XML在哪里?谢谢Marc的回复。。这是XML-PolicyNumber>123456 54401084417000 03/07/2014请不要将代码示例或示例数据放入注释中-因为您无法对其进行格式化,所以读取它非常困难。。。。取而代之的是:通过编辑你的问题来更新它,以提供额外的信息!非常感谢。