xml列上的联接表
在SQLServer2005数据库上,我有如下两个表xml列上的联接表,xml,sql-server-2005,Xml,Sql Server 2005,在SQLServer2005数据库上,我有如下两个表 Request(RequestId int, Filter xml) DataTable(Id int,.....) filter列中有一个来自datatable的ID列表,如1013的xml 现在,我想从DataTable中选择与过滤器xml中的ID匹配的数据。这是我想到的 select d.* from request cross apply filter.nodes('Ids/Id') as Ids(id) inn
Request(RequestId int, Filter xml)
DataTable(Id int,.....)
filter列中有一个来自datatable的ID列表,如1013的xml
现在,我想从DataTable中选择与过滤器xml中的ID匹配的数据。这是我想到的
select d.*
from request
cross apply filter.nodes('Ids/Id') as Ids(id)
inner join DataTable d on d.id = Ids.Id.value('.', 'int')
where requestid = 35
这是可行的,但我想知道这是否是最好的方法 这就是我进行类似联接的方式(从xml参数到表)。。。如果有帮助的话
它清晰易懂这是我能够从一个带有xml列的表的多行中提取连接的唯一方法。我使用的另一种方法是使用CTE并使用CTE中的交叉应用程序将整个结果集合并到单个XML列中。上面的例子是:
WITH tmpCTE AS
(
SELECT
(
SELECT
r.RequestID AS [requestid]
, r.Filter.query('//id') AS [id]
FROM Request AS r
FOR XML PATH('request'), TYPE, ROOT('root')
) AS tmpXML
)
SELECT d.*
FROM
tmpCTE AS tmp
CROSS APPLY tmpXML.nodes('Ids/Id') as Ids(id)
INNER JOIN DataTable AS d on d.id = Ids.Id.value('.', 'int')
WHERE
requestid = 35
;
这有点多余,但我认为将整个结果集分解成XML,然后再将其分解成列是有价值的;尤其是跨多行