web-dev-qa-db-ja.com

Sql Serverを使用してXmlの内部ノード値を読み取る

SQLでXMLのノード値を読みたいのですが、私のXMLは次のようになります

enter image description here

'Order 1'である注文ノードの値を読み取りたいだけで、コードは

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
SELECT * FROM OPENXML (@idoc, '/ROOT/Customer/Order',0)
WITH (
    [Order]  varchar(100)
    );
2
Abhay
CREATE TABLE test(data xml);
insert into test values
('
<ROOT>
  <Customer>
    <Order>Order 1</Order>
  </Customer>
  <Customer>
    <Order>Order 2</Order>
  </Customer>
</ROOT>');
GO
 1行が影響を受けました

最初に必要な場合<Order> XMLデータの要素で、次の文を使用できます。

SELECT data.value('(ROOT/Customer/Order)[1]', 'varchar(100)')
FROM   test;
GO
 | (列名なし)| 
 | :------------ |注文1 | 

すべてを選択する必要がある場合<Order>要素.nodes()でCROSS APPLYソリューションを使用できます

SELECT T2.lin.value('(Order)[1]', 'varchar(100)')
FROM   test
CROSS APPLY data.nodes('/ROOT/Customer') as T2(lin)
GO
 | (列名なし)| 
 | :--------------- | 
 |注文1 | 
 |注文2 | 

dbfiddle ---(ここ

6
McNets