遍历SQL Server 2008数据库列中的XML文档

时间:2009-11-13 00:02:59

标签: xml sql-server-2008 types

我有一个包含XML数据类型列的表。我希望在整个表上放置一个视图,包括XML数据类型列。该视图将展开XML数据类型列的内容。我遇到的问题是能够遍历整个XML文档并从特定的XML节点中获取值。

我正在使用这个SQL查询,它只获取FuelPathwayCode XML节点的第一个值实例。我希望遍历整个XML文档并在一个结果集中查询/ FuelPathwayCode XML节点的所有值?

SELECT 
   UploadFileID, Year, Quarter, 
   FileContent.value('(LCFS-Report/Fuel/FuelPathwayCode)[1]', 'varchar(100)') as FuelPathwayCode 
FROM LC_UploadXM

我正在寻找这样的结果集:

UploadFileID  Year  Quarter  FuelPathWayCode   PhysicalPathwayCode
8             2010  4        CARBOB001         PP001
8             2010  4        CARBOB002-HIGH    PP001  

表格列:

UploadFileID,
Year,
Quarter,
CompanyID,
FileType,
FileContent,
FileName,
Description,
Success,
AddBy,
AddDttm

2 个答案:

答案 0 :(得分:1)

你需要做一个CROSS APPLY并选择你需要的XML,然后你需要对这些进行一系列.value调用:

SELECT 
   UploadFileID, Year, Quarter, 
   FC.Node.value('(FuelPathwayCode)[1]', 'varchar(100)') as FuelPathwayCode 
FROM 
   LC_UploadXM
CROSS APPLY 
   FileContent.nodes('/LCFS-Report/Fuel') as FC(Node)

这基本上会占用XPath /LCFS-Report/Fuel中存在的所有XML节点,并将它们用作表中的行(模式为FC,“虚拟表”名称为“节点” - 这些可以无论你喜欢使用,完全取决于你),然后将这些行交叉应用到基本选择。

现在可以查询“虚拟表”FC.Node的个别值 - 例如XML中的“指针”已经位于XML中的“Fuel”子节点上,现在您可以使用.value()调用访问其中的各个值。

查看Alex Homer的SQL Server 2005 XQuery介绍文章 - 优秀的资源!

答案 1 :(得分:0)

值是标量函数。请尝试使用query()。

http://msdn.microsoft.com/en-us/library/ms191474.aspx