查询 XML 数据

问题描述

尝试查询一些 XML 数据,数据结构如下。 (但有更多的行)。

<FIELD>
  <ROW>
    <FIELD name="LI_PRODID">1</FIELD>
    <FIELD name="LI_QTY">3</FIELD>
    <FIELD name="CALC_UOM">1</FIELD>
  </ROW>
    <ROW>
        <FIELD name="LI_PRODID">2</FIELD>
        <FIELD name="LI_QTY">4</FIELD>
        <FIELD name="CALC_UOM">1</FIELD>
    </ROW>
</FIELD>

我有以下几点:

声明@nameElement NVARCHAR(30) = '"LI_PROD"';

SELECT      
col.value('(FIELD/ROW/FIELD[name=sql:variable("@nameElement")])[1]','nvarchar(30)')
FROM
Table

我将如何实际将每个“LI_PRODID”作为一列放在不同的行上,然后为每一行重复每个“LI_PRODID”?

解决方法

假设它是 SQL Server。

XQuery .nodes().value() 方法生成您需要的内容。

您可能需要调整超出 INT 的数据类型。

SQL

-- DDL and sample data population,start
DECLARE @tbl TABLE (ID INT IDENTITY PRIMARY KEY,xmldata XML);
INSERT INTO @tbl (xmldata) VALUES
(N'<FIELD>
    <ROW>
        <FIELD name="LI_PRODID">1</FIELD>
        <FIELD name="LI_QTY">3</FIELD>
        <FIELD name="CALC_UOM">1</FIELD>
    </ROW>
    <ROW>
        <FIELD name="LI_PRODID">2</FIELD>
        <FIELD name="LI_QTY">4</FIELD>
        <FIELD name="CALC_UOM">1</FIELD>
    </ROW>
</FIELD>');
-- DDL and sample data population,end

SELECT c.value('(FIELD[@name="LI_PRODID"]/text())[1]','INT') AS LI_PRODID,c.value('(FIELD[@name="LI_QTY"]/text())[1]','INT') AS LI_QTY,c.value('(FIELD[@name="CALC_UOM"]/text())[1]','INT') AS CALC_UOM
FROM @tbl CROSS APPLY xmldata.nodes('/FIELD/ROW') AS t(c);

输出

+-----------+--------+----------+
| LI_PRODID | LI_QTY | CALC_UOM |
+-----------+--------+----------+
|         1 |      3 |        1 |
|         2 |      4 |        1 |
+-----------+--------+----------+
,

假设使用 SQL Server,这应该可以满足您的需求。

declare @x xml = 
'<FIELD>
  <ROW>
    <FIELD name="LI_PRODID">1</FIELD>
    <FIELD name="LI_QTY">3</FIELD>
    <FIELD name="CALC_UOM">1</FIELD>
  </ROW>
    <ROW>
        <FIELD name="LI_PRODID">2</FIELD>
        <FIELD name="LI_QTY">4</FIELD>
        <FIELD name="CALC_UOM">1</FIELD>
    </ROW>
</FIELD>'




SELECT 
   ROWITEM.value('@name','varchar(10)')  as rc
from @x.nodes('(/FIELD/ROW/FIELD)') AS FIELD(ROWITEM)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...