我有两个结构与此类似的表:
Table1 ([Table1Id] INT,
[Sequence] INT,
[Table2Id] INT)
Table2 ([Table2Id] INT,
[XMLData] XML)
表 2 中 XML 的基本部分是:
<Root>
<Record>
<Sequence>1</Sequence>
<Order>
<Product>Widget</Product>
</Order>
</Record>
<Record>
<Sequence>2</Sequence>
<Order>
<Product>Bolt</Product>
</Order>
</Record>
</Root>
我需要能够从表 1 连接到表 2,然后根据序列号提取适当的记录,以获得如下结果集:
Table1Id Table2Id Sequence Product
-------- -------- -------- -----------
1 1 1 Widget
1 1 2 Bolt
我不知道如何得到这个结果。任何帮助将不胜感激。
最佳答案
在 xquery 的谓词中使用 sql:column()
,将 XML 中的 Sequence 值与 Table1 中的 Sequence 值进行比较。
select T1.Table1ID,
T1.Table2Id,
T1.Sequence,
T2.XMLData.value('(/Root/Record[Sequence/text() = sql:column("T1.Sequence")]/Order/Product/text())[1]', 'nvarchar(50)') as Product
from Table1 as T1
inner join Table2 as T2
on T1.Table2Id = T2.Table2Id
关于sql - 将列中的 XML 节点连接到另一个表中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21094136/