【发布时间】:2012-01-29 12:51:39
【问题描述】:
有人可以帮我在 T-SQL (SQL Server 2005) 中解析以下 XML 吗?
<Tx>
<T>1</T>
<C>1</C>
<T>2</T>
<C>1</C>
<T>3</T>
<C>1</C>
<T>4</T>
<C>1</C>
</Tx>
我尝试了以下方法:
SELECT
Tx.query('T').value('.', 'varchar(10)') AS [Column 1],
Tx.query('C').value('.', 'varchar(10)') AS [Column 2]
FROM @MyXml.nodes('Tx') x(Tx)
但它不起作用,因为我得到以下结果:
Column 1 Column 2
-------- --------
1234 1111
同时期待(我想要实现的目标):
Column 1 Column 2
-------- --------
1 1
2 1
3 1
4 1
字符串显然是一个有效的 XML,但它对 T-SQL 有效吗?
如果有人能提供解释 XML 如何在 T-SQL 中工作的参考资料,我将不胜感激。
提前致谢。
【问题讨论】:
-
显然您想将
C与T匹配。哪些值相互配对是否重要,还是可以选择任何值? -
@MikaelEriksson,对不起,我不明白这个问题。我将 XML 发送到存储过程,然后从那里我正在做类似的事情(在临时表中插入 XML 之后):基于 [Column 2] 将 XML“表”与 MyTable1 连接并插入 [Column 1]在 MyTable2... 或
INSERT INTO MyTable2 (SomeColumn, SomeOtherColumn) SELECT A.[Column 2], B.AnotherColumn FROM @xmlTable A JOIN MyTable1 B ON A.[Column 1] = B.Id -
在您的示例数据中,
C的值始终为1。一个 XML 中的所有 C 是否都只有一个不同的值? -
@MikaelEriksson,如果它总是一个不同的值,我没问题,对吧? :) 我给出的示例 XML 只是一个示例,但有点说
C与T相比几乎没有不同的值。 -
你想让
T的第一个值与C的第一个值配对,T的第二个值与C的第二个值配对,等等, ETC ....?使用数字表可以有更多的 T 然后 Cs or more C´s than T´s? Can there be two or more consecutive T´s without a C in between or the other way around? It is possible to do a XQuery onposition`。我可以提供一个答案,但我想知道配对 Ts and Cs 的规则。顺便说一句,@marc-s 说如果可以的话你应该重新设计你的 XML 是正确的。
标签: xml tsql xpath xml-parsing xquery