Tôi có một số XML mà tôi cần phân tích bằng cách sử dụng SQL Server 2008. Tôi nghĩ rằng tôi gần đạt được những gì tôi muốn, nhưng tôi không có cú pháp chính xác (tôi tin).Chọn phần tử XML trong SQL Server
tôi có như sau:
DECLARE @doc XML
SET @doc = '<ROOT>
<InvoiceDetail>
<OrderId>1000000</OrderId>
<OrderTypeId>2</OrderTypeId>
<Id>2000</Id>
<InvoiceItems>
<InvoiceItem>
<LineId>1</LineId>
<Cd>123456</Cd>
<Description>Item 1</Description>
<Quantity>1</Quantity>
<UnitPrice>99.990000</UnitPrice>
</InvoiceItem>
<InvoiceItem>
<LineId>2</LineId>
<Cd>234567</Cd>
<Description>Item 2</Description>
<Quantity>1</Quantity>
<UnitPrice>89.990000</UnitPrice>
</InvoiceItem>
</InvoiceItems>
</InvoiceDetail>
<InvoiceDetail>
<OrderId>1200000</OrderId>
<OrderTypeId>1</OrderTypeId>
<Id>3000</Id>
<InvoiceItems>
<InvoiceItem>
<LineId>1</LineId>
<Cd>234567</Cd>
<Description>Item 2</Description>
<Quantity>1</Quantity>
<UnitPrice>89.990000</UnitPrice>
</InvoiceItem>
<InvoiceItem>
<LineId>2</LineId>
<Cd>345678</Cd>
<Description>Item 3</Description>
<Quantity>1</Quantity>
<UnitPrice>79.990000</UnitPrice>
</InvoiceItem>
</InvoiceItems>
</InvoiceDetail>
</ROOT>'
SELECT
Invoices.Node.value('@OrderId', 'VARCHAR(10)') 'OrderID'
, Invoices.Node.value('@Id', 'INT') 'InvoiceId'
, Items.Cd.value('.', 'VARCHAR(14)') 'ItemId'
FROM
@doc.nodes('//InvoiceDetail') Invoices(Node)
CROSS APPLY Invoices.Node.nodes('./InvoiceItems/InvoiceItem/Cd') Items(Cd)
tôi nhận được kết quả như sau:
NULL NULL 123456
NULL NULL 234567
NULL NULL 234567
NULL NULL 345678
Tôi đang cố gắng để có được những điều sau đây:
1000000 2000 123456
1000000 2000 234567
1200000 3000 234567
1200000 3000 345678
Tôi đang làm gì sai ?
1 để dễ dàng kiểm chứng/example tái sản xuất –