sql-server - SQL Server:包含 XML 数据的列
问题描述
我想将 XML 数据中的值提取到列中。
我尝试使用这个:
DECLARE @xml XML
SELECT @xml = Data FROM synergy..XMLData
SELECT
xmlData.Col.value('(column/@value)[1]','varchar(255)') AS 'Artikelen',
xmlData.Col.value('(column/@value)[2]','varchar(255)') AS 'Batchnummer',
xmlData.Col.value('(column/@value)[3]','varchar(255)') AS 'Aantal'
FROM
@XML.nodes ('//table/rows/row/columns') xmldata(Col)
但是我只得到标题,但没有数据。
这就是 XML 的样子:
<?xml version="1.0" encoding="utf-16"?>
<table>
<id>{941D5F5A-156A-4F19-A3B0-111E9825707B}</id>
<rows>
<row>
<columns>
<column name="Artikelen" value="102535.A.M2" type="System.String" />
<column name="Batchnummer" value="19D1739/133" type="System.String" />
<column name="Aantal" value="8" type="System.Int32" />
<column name="Opmerkingen" value="te weinig" type="System.String" />
<column name="Selecteren" value="1" type="System.String" />
<column name="DefaultKey" value="1" type="System.Int32" />
</columns>
</row>
</rows>
<key>DefaultKey</key>
<total>0</total>
<AddOnKey>0</AddOnKey>
<data />
<parameters />
</table>
解决方案
最好通过引用命名属性而不是它们的位置来分解 XML 并获取所需的数据。
SQL
DECLARE @xml XML = '
<table>
<id>{941D5F5A-156A-4F19-A3B0-111E9825707B}</id>
<rows>
<row>
<columns>
<column name="Artikelen" value="102535.A.M2" type="System.String"/>
<column name="Batchnummer" value="19D1739/133" type="System.String"/>
<column name="Aantal" value="8" type="System.Int32"/>
<column name="Opmerkingen" value="te weinig" type="System.String"/>
<column name="Selecteren" value="1" type="System.String"/>
<column name="DefaultKey" value="1" type="System.Int32"/>
</columns>
</row>
</rows>
<key>DefaultKey</key>
<total>0</total>
<AddOnKey>0</AddOnKey>
<data/>
<parameters/>
</table>';
SELECT col.value('(column[@name="Artikelen"]/@value)[1]','VARCHAR(255)') AS [Artikelen]
, col.value('(column[@name="Batchnummer"]/@value)[1]','VARCHAR(255)') AS [Batchnummer]
, col.value('(column[@name="Aantal"]/@value)[1]','INT') AS [Aantal]
FROM @XML.nodes ('/table/rows/row/columns') AS tab(col);
输出
+-------------+-------------+--------+
| Artikelen | Batchnummer | Aantal |
+-------------+-------------+--------+
| 102535.A.M2 | 19D1739/133 | 8 |
+-------------+-------------+--------+
推荐阅读
- java - 为什么 Spring Boot Starter Mongodb Reactive 不保存我的实体的列表字段?
- python - Django Rest 没有明确声明
- visual-studio-code - 使用断点步骤调试时显示编辑器
- r - 子集数据集仅保留平均值
- python - 使用 kazoo python 注册服务并用于服务发现
- python - python selenium 没有打开新的实例窗口并且不工作
- node.js - Nodejs Canvas 模块在命令行加载,但不会在 nssm 服务中加载
- python - /contact/ 处的 ProgrammingError 是什么意思?
- swift - 添加的子视图稍微偏离了位置 - 我怎样才能将它放回原位?
- mysql - 当默认存储引擎数据库为 MyIsam 时,具有 InnoDB 引擎的表是否会损坏?