如何避免 SQL Server 在使用 XQuery 时返回重复值

问题描述 投票:0回答:1

我在这里发现了一些与我所面临的问题很接近的问题,但没有一个解决了我的疑问。 当我将 XML 文档解析为 SQL 结果集时,我得到了一些重复值。 看起来信息已经通过了两次,但是当我尝试仅使用一个外部应用时,它只带来 NULL 值。

在这里,我试图获取条形码和数量,但条形码重复更改数量总数。 看起来每个条形码都已附加到文档中的任何数量。

我已经在这个问题上困扰了很长一段时间,我真的很感激对此的任何启发。

提前谢谢您。

    With cte as
    (Select

    Id,
    Filename,
    Cast(replace(cast(XMLData as nvarchar(max)), 'utf-8', 'utf-16') as xml) as XMLContent,
    LoadedDateTime

    From XMLFilesDESADV
    Where Processed Is Null)

    Select 

    --Id,
    --Filename,
    --Header.N.value ('(*:SalesOrderNumber)[1]', 'Varchar(50)') as SalesOrderNumber,
    --Header.N.value ('(*:SalesOrderNumber)[1]', 'Varchar(50)') as SalesOrderNumber1,
    --Header.N.value ('(*:CustomerReference)[1]', 'Varchar(50)') as PONumber,
    --PVDetail.N.value ('(*:CustomerNumber)[1]', 'Varchar(100)') as StoreID,
    --PartyVariant.N.value ('(*:Name)[1]', 'Varchar(100)') as StoreName,
    LinesVariant.N.value ('(*:GlobalTradeItemNumber)[1]', 'varchar(100)') as BarCode,
    LinesVariant2.N.value ('(*:Quantity)[1]', 'varchar(100)') as Quantity

    From cte


    --outer apply cte.XMLContent.nodes('/*:SalesDespatchAdvice_Xml_Full/*:Header') as Header(N)
    --outer apply cte.XMLContent.nodes('/*:SalesDespatchAdvice_Xml_Full/*:Header/*:Parties/*:BuyerParty/*:PartyIdentificationDetail') as PVDetail(N)
    --outer apply cte.XMLContent.nodes('/*:SalesDespatchAdvice_Xml_Full/*:Header/*:Parties/*:BuyerParty') as PartyVariant(N)
    outer apply cte.XMLContent.nodes('/*:SalesDespatchAdvice_Xml_Full/*:Lines/*:Line/*:Item') as LinesVariant(N)
    outer apply cte.XMLContent.nodes('/*:SalesDespatchAdvice_Xml_Full/*:Lines/*:Line/*:Summations') as LinesVariant2(N)

这是 XML 示例:

XML Sample

这是我得到的结果:

条形码 数量
5715502955189 6
5715502955189 4
5715502955189 2
5715502955189 4
5715502955189 2
5715502955264 6
5715502955264 4
5715502955264 2
5715502955264 4
5715502955264 2
5715512355238 6
5715512355238 4
5715512355238 2
5715512355238 4
5715512355238 2
5715512355245 6
5715512355245 4
5715512355245 2
5715512355245 4
5715512355245 2
5715512355252 6
5715512355252 4
5715512355252 2
5715512355252 4
5715512355252 2
xml-parsing
1个回答
0
投票

我想我发现了这个问题。 我会发布我所做的事情。

    Select 

    LinesVariant.N.value ('(*:Item/*:GlobalTradeItemNumber)[1]', 'varchar(100)') as BarCode,
    LinesVariant.N.value ('(*:Summations/*:Quantity)[1]', 'varchar(100)') as Quantity

    From cte

    outer apply cte.XMLContent.nodes('/*:SalesDespatchAdvice_Xml_Full/*:Lines/*:Line') as LinesVariant(N)
© www.soinside.com 2019 - 2024. All rights reserved.