Как я могу присоединить столбец XML обратно к записи, из которой он происходит? - PullRequest
2 голосов
/ 05 ноября 2008

У меня есть таблица «Blah» с PK-столбцом BlahID и XML-столбцом BlahItems в базе данных на SQL Server 2005.

Эта таблица имеет следующие записи ...

BlahID BlahItems
------ ------------------------------------------------------
1      <root><item name="Fred" /><item name="Wilma" /></root>
2      <root><item name="Lisa" /><item name="Bart" /></root>

Как я могу запросить эту таблицу, чтобы получить следующее ....

BlahID BlahItem
------ --------
1      Fred
1      Wilma
2      Lisa
2      Bart

Самое близкое, что мне удалось получить, - это ФУНКЦИЯ для каждой записи, которая делает что-то вроде следующего ...

CREATE FUNCTION dbo.Blahs(@id int)
RETURNS @list TABLE (BlahID int, BlahItem nvarchar(max))
BEGIN
    DECLARE @xml AS xml
    SELECT @xml = BlahItems FROM dbo.Blah AS b WHERE b.BlahID = @id

    INSERT INTO @list
    SELECT @id, tbl.col.value('@name','nvarchar(max)')
    FROM @xml.nodes('/root/item') tbl(col)
    RETURN
END

SELECT * FROM dbo.Blahs(1)
BlahID BlahItem
------ --------
1      Fred
1      Wilma

Моя конечная цель - создать ВИД «расширенных» данных, а затем выполнить запрос к представлению.

1 Ответ

5 голосов
/ 06 ноября 2008

Вы можете попробовать этот запрос:

SELECT BlahID, XmlItems.BlahItem.value('@name', 'nvarchar(100)') AS BlahItem
FROM Blah CROSS APPLY BlahItems.nodes('/root/item') AS XmlItems(BlahItem)

Для получения дополнительной информации проверьте эту статью из трех частей Алекса Гомера.

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