如何将 XML 文件导入到 XML 中带有重复标签的 MSSQL

How to import XML file into MSSQL with duplicate tags in the XML

我有一个销售 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个或更多标签时,如示例数据,只导入第一笔付款。

我们将不胜感激任何帮助。

谢谢,吉拉德

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

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)