如何在设计时连接两个参数名未知的xml字段

如何在设计时连接两个参数名未知的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

我有两个表需要基于匹配的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
谢谢你,迈克。很抱歉没有早点给你答案。你的回答使我找到了最终的解决办法。我记得我撞了头,然后你的回答让我明白了。你太棒了!
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