【发布时间】:2020-08-13 11:30:05
【问题描述】:
我有一个这种格式的 XML 列:
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>SubscriberBalanceBefore</name>
<value>
<string>0.0</string>
</value>
</member>
<member>
<name>TimeStamp</name>
<value>
<dateTime.iso8601>20200812T12:31:10</dateTime.iso8601>
</value>
</member>
<member>
<name>Subsc riberMSISDN</name>
<value>
<string>83000000</string>
</value>
</member>
<member>
<name>TransactionID</name>
<value>
<string>8035768</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
我希望得到如下表所示的结果:
-------------------------
name | TransactionID
----------|---------------
830000000 | 8035768
我尝试过使用CROSS 和OUTER APPLY,但它不起作用:
SELECT
X.Y.value('(name)[3]', 'VARCHAR(max)') as NAME_FIELD,
X.Y.value('(value/string)[4]', 'varchar(max)') DATA_CONTENT
FROM [TABLE] T
OUTER APPLY T.xmlIn.nodes('methodResponse/params/param/value/struct/member') as X(Y)
它不会给出错误,但会为两个字段返回空值。有人可以帮忙吗?
【问题讨论】:
-
上面的会给出一个错误,特别是
XQuery [T.xmlIn.value()]: Invalid source character '\' (0x5c)。应该是value/string(正斜杠,而不是反斜杠) -
谢谢@Larnu,但这是拼写错误。我在查询中使用了“\”。
标签: sql-server xml