2017-02-13 69 views
1

我想根据SQL中的列值查询XML。根据SQL中的列值查询XML

我的XML是如下

declare @xmlValue xml = 
'<Accounts> 
<Account> 
    <ID>1</ID> 
    <Name>Alex</Name> 
    <Age>10</Age> 
    </Account> 
    <Account> 
    <ID>2</ID> 
    <Name>Richard</Name> 
    <Age>12</Age> 
    </Account> 
    <Account> 
    <ID>3</ID> 
    <Name>Shane</Name> 
    <Age>15</Age> 
    </Account> 
</Accounts>'; 

现在我知道我可以查询标识的XML,如果我有一个恒定的编号是这样的:

select @xmlValue.query('/Accounts[1]/Account[./ID/text()="2"]'); 

而且,我可以使用sql:variable像下面,万一我有一个变量:

declare @ID int 
set @ID = 1 
select @xmlValue.query('/Accounts[1]/Account[./ID/text()=sql:variable("@ID")]'); 

现在,我有一个表#tmpTable与XML列(名为xmlValue)。 我想查询#tmpTable与加盟Account表,并从那里得到的AccountID,有点像这样:

-- This does not work 
select xmlValue.query('/Accounts[1]/Account[./ID/text()=a.AccountId]') as XMLResult 
from #tmpTable tmp 
inner join Accounts a on tmp.Id = a.Id 
where a.Active = 1 

我怎样才能做到这一点?任何帮助将不胜感激。

回答

2

试试这样说:

select xmlValue.query('/Accounts[1]/Account[./ID/text()=sql:column("a.AccountId")]') as XMLResult 
from #tmpTable tmp 
inner join Accounts a on tmp.Id = a.Id 
where a.Active = 1 

sql:column()是 - 类似sql:variable() - 适当的方式介绍列的值转换为XQuery

+0

感谢。有效 :) –