如何在设计时连接两个参数名未知的xml字段
我有两个表需要基于匹配的xml进行连接。使用xml是因为在设计时有一组未知的值。我已经在下面写了3封信。谢谢你能提供的帮助 表 身份证件 xml 表B 身份证件 xml 表A 1,Parm1X 2,Parm1Y Parm2123 3,Parm1Y Parm2578 表B 7,Parm1X 8,Parm1Y Parm2123 9,Parm1Y Parm2123 Parm2578 查询类似的内容,但我需要有关联接的帮助 select A.Id , B.Id from TableA A inner join TableB B on ??? 预期结果 A.Id B.Id 1 7 2 8 3 8 3 9如何在设计时连接两个参数名未知的xml字段,xml,sql-server-2008,Xml,Sql Server 2008,我有两个表需要基于匹配的xml进行连接。使用xml是因为在设计时有一组未知的值。我已经在下面写了3封信。谢谢你能提供的帮助 表 身份证件 xml 表B 身份证件 xml 表A 1,Parm1X 2,Parm1Y Parm2123 3,Parm1Y Parm2578 表B 7,Parm1X 8,Parm1Y Parm2123 9,Parm1Y Parm2123 Parm2578 查询类似的内容,但我需要有关联接的帮助 select A.Id , B.Id from Table
谢谢你,迈克。很抱歉没有早点给你答案。你的回答使我找到了最终的解决办法。我记得我撞了头,然后你的回答让我明白了。你太棒了!
declare @TableA table (id int, xmlCol xml)
declare @TableB table (id int, xmlCol xml)
insert into @TableA values
(1, '<parms><parm><name>Parm1</name><value>X</value></parm></parms>'),
(2, '<parms><parm><name>Parm1</name><value>Y</value></parm>
<parm><name>Parm2</name><value>123</value></parm></parms>'),
(3, '<parms><parm><name>Parm1</name><value>Y</value></parm>
<parm><name>Parm2</name><value>578</value></parm></parms>')
insert into @TableB values
(7, '<parms><parm><name>Parm1</name><value>X</value></parm></parms>'),
(8, '<parms><parm><name>Parm1</name><value>Y</value></parm>
<parm><name>Parm2</name><value>123</value></parm></parms>'),
(9, '<parms><parm><name>Parm1</name><value>Y</value></parm>
<parm><name>Parm2</name><value>123</value></parm>
<parm><name>Parm2</name><value>578</value></parm></parms>')
;with cteA as
(
select
A.id,
p.value('name[1]', 'varchar(50)') as Name,
p.value('value[1]', 'varchar(50)') as Value
from @TableA as A
cross apply A.xmlCol.nodes('parms/parm') as n(p)
), cteB as
(
select
B.id,
p.value('name[1]', 'varchar(50)') as Name,
p.value('value[1]', 'varchar(50)') as Value
from @TableB as B
cross apply B.xmlCol.nodes('parms/parm') as n(p)
)
select distinct
A.id as 'A.id',
(select top 1 B.id
from cteB as B
where B.Name = B.Name and
B.Value = A.Value
order by B.id asc) as 'B.id'
from cteA as A
order by 1, 2