我有一个包含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
答案 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()。