如何将XML列重新加入其源自的记录?

时间:2008-11-05 20:34:53

标签: xml sql-server-2005 tsql

我在SQL Server 2005的数据库中有一个表“Blah”,其中包含PK列BlahID和XML列BlahItems。

此表的记录如下......

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

我设法得到的最接近的是每条记录的FUNCTION,它可以按照以下方式执行...

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

我的最终目标是创建“扩展”数据的VIEW,然后根据视图进行查询。

1 个答案:

答案 0 :(得分:5)

您可以尝试此查询:

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

欲了解更多信息,请查看Alex Homer的this three-part article