Присоединиться к таблице в столбце xml - PullRequest
2 голосов
/ 27 февраля 2009

У меня есть 2 таблицы в базе данных Sql Server 2005 следующим образом

Request(RequestId int, Filter xml)
DataTable(Id int,.....)

В столбце фильтра есть список идентификаторов данных, например, в формате xml, например. 1013

Теперь я хочу выбрать данные из таблицы данных, которые соответствуют идентификаторам в фильтре xml. Вот что я придумала

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

Это работает, но я хочу знать, является ли это лучшим способом сделать это.

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Это единственный способ, с помощью которого я смог получить объединения из нескольких строк таблицы со столбцом xml. Еще один метод, который я использовал, - это объединение всего набора результатов в один столбец XML с использованием CTE и перекрестного применения из CTE. Пример выше будет:

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 и затем разбить его обратно на столбцы; особенно в нескольких рядах.

1 голос
/ 01 марта 2009

Так я делаю похожие объединения (из параметра xml в таблицы) ... если это помогает.

Это чисто и понятно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...