【发布时间】:2020-06-04 13:39:04
【问题描述】:
例如,我有一个名为 t 的 SQL Server 表,它有 2 列和很多行
- ID(PK,int,非空)
- 数据(XML(.),非空)
在数据字段中我有这个 XML(我不能改变它的格式)
<ArrayOfDataAttribute xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<DataAttribute>
<Name>field1</Name>
<Value>default-value-example</Value>
</DataAttribute>
<DataAttribute>
<Name>field2</Name>
</DataAttribute>
<DataAttribute>
<Name>field5</Name>
<Value>False</Value>
</DataAttribute>
<DataAttribute>
<Name>field4</Name>
<Value>example value</Value>
</DataAttribute>
<DataAttribute>
<Name>field5</Name>
<Value>another value</Value>
</DataAttribute>
</ArrayOfDataAttribute>
我需要从 t 返回兄弟 xml 项目名称的 ID 和内容,其中它等于 field4 或 null/空字符串(如果该行不存在)。
所以如果只有一行,我会这样结束
标识 |字段4
1 |示例值
从在线阅读看来,使用“节点”是一种方法,但我没有得到任何结果,我在网上找到的示例似乎是人们正在寻找特定价值的地方。这是我得到的最接近的:
SELECT T2.Loc.value('.', 'varchar(max)')
FROM t
CROSS APPLY t.Data.nodes('/*:ArrayOfDataAttribute/*:DataAttribute/Name') as T2(Loc)
感谢任何帮助
非常感谢 理查德
【问题讨论】:
标签: sql-server xml tsql xquery