【问题标题】:How to import XML file into MSSQL with duplicate tags in the XML如何使用 XML 中的重复标签将 XML 文件导入 MSSQL
【发布时间】:2015-03-10 14:02:07
【问题描述】:

我有一个销售 XML 文件,其中每个销售看起来像这样:

<Sale>
<Store>2725</Store>
<Station>2</Station>
<Date>01/03/2015 14:23:24</Date>
<SaleType>12</SaleType>
<SaleNumber>9213</SaleNumber>
<Tot>1060.00</Tot>
<LnQnt>2</LnQnt>
<Lines>
<Line>
<Code>20</Code>
<Price>480.00</Price>
<Qnt>1</Qnt>
<LnTot>480.00</LnTot>
</Line>
<Line>
<Code>20</Code>
<Price>580.00</Price>
<Qnt>1</Qnt>
<LnTot>580.00</LnTot>
</Line>
</Lines>
<payments>
<PayQnt>2</PayQnt>
<Pay>1^ 500.00^</Pay>
<Pay>4^ 560.00^</Pay>
</payments>
</Sale>

我使用以下语法导入付款数据:

DECLARE @InputXML XML

SELECT @InputXML = CAST(x AS XML)
FROM OPENROWSET(BULK 'C:\Temp\Sales.xml', SINGLE_BLOB) AS T(x)

INSERT INTO temp_sales_payments 
SELECT row.value('(../Store)[1]', 'NVARCHAR(255)') Store
    ,row.value('(../Station)[1]', 'int') Station
    ,row.value('(../Date)[1]', 'NVARCHAR(255)') Date
    ,row.value('(../SaleType)[1]', 'int') SaleType
    ,row.value('(../SaleNumber)[1]', 'int') SaleNumber
    ,row.value('(PayQnt)[1]', 'int') PayQnt  
    ,row.value('(Pay)[1]', 'NVARCHAR(255)') Pay
FROM  @InputXML.nodes('Sales/Sale/payments') AS X(row);

只要有一个标签,一切正常,但当有 2 个或更多标签时,如示例数据所示,仅导入第一笔付款。

任何帮助都将是最受重视的。

谢谢,吉拉德

【问题讨论】:

    标签: sql-server xml import


    【解决方案1】:

    您的示例 XML 与您的节点查询不匹配,它在 XML 中缺少“销售”,所以我不得不修改查询的那部分。

    SELECT xmlData.a.value('(../Store)[1]', 'NVARCHAR(255)') AS Store
        ,xmlData.a.value('(../Station)[1]', 'int') AS Station
        ,xmlData.a.value('(../Date)[1]', 'NVARCHAR(255)') AS Date
        ,xmlData.a.value('(../SaleType)[1]', 'int') AS SaleType
        ,xmlData.a.value('(../SaleNumber)[1]', 'int') AS SaleNumber
        ,xmlData.a.value('(PayQnt)[1]', 'int') AS PayQnt  
        ,xmld.b.value('.', 'NVARCHAR(255)') AS Pay
    FROM  @InputXML.nodes('Sale/payments') xmlData(a)
    CROSS APPLY XMLDATA.a.nodes('Pay') AS xmld(b)
    

    【讨论】:

    • 非常感谢 Dbloch!解决了!
    猜你喜欢
    • 2021-03-14
    • 2023-04-05
    • 2011-12-25
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多