如果记录已经存在,则读取XML并使用存储过程插入SQL表,而不是仅通过存储过程进行插入
我的查询:-在此查询中,仅当再次解析整个XML时,它才会工作,不会插入重复记录,但如果更改XML中3条记录中的1条记录,它将再次插入所有记录,这意味着表中再次出现重复记录,请任何人帮助我如何避免此问题,看起来我需要使用游标或for循环遍历每个记录,请帮助我如何做 这是我的密码如果记录已经存在,则读取XML并使用存储过程插入SQL表,而不是仅通过存储过程进行插入,sql,Sql,我的查询:-在此查询中,仅当再次解析整个XML时,它才会工作,不会插入重复记录,但如果更改XML中3条记录中的1条记录,它将再次插入所有记录,这意味着表中再次出现重复记录,请任何人帮助我如何避免此问题,看起来我需要使用游标或for循环遍历每个记录,请帮助我如何做 这是我的密码 ALTER PROCEDURE [dbo].[SP_XMLtoTABLEInsert] ( @xmlData XML , @retValue varchar(20) OUTPUT ) AS --
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请不要将代码示例或示例数据放入注释中-因为您无法对其进行格式化,所以读取它非常困难。。。。取而代之的是:通过编辑你的问题来更新它,以提供额外的信息!非常感谢。