我在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,然后根据视图进行查询。
答案 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。