0
源数据看起来来自以下免费提供的描述大联盟棒球比赛的XML文件。棒球XML到SQL查询 - 优化
我已经创建了一个包含一排每GamePK /局,名为PBP XML列的SQL Server表。上述文件夹中的每个文件都成为此表中的一行。下面的查询是我尝试将XML解析为记录集。它可以工作,但对于大量的行非常缓慢,并且非常重复 - 似乎应该有一种更好的方法来在没有UNION子句的情况下执行此操作。在改进/优化的任何帮助,如果你使用的是最新版本的SQL Server赞赏
select
i.GamePK
,inn.value('@num', 'int') as inning
,itop.value('1', 'int') as IsTop
,itop.value('@num', 'int') as abNum
,itop.value('@batter', 'int') as batter
-- clip
,itoppit.value('@des', 'varchar(32)') as pitdesc
,itoppit.value('@id', 'int') as seq
,itoppit.value('@type', 'varchar(8)') as pittype
-- clip
from tblInnings i
cross apply PBP.nodes('/inning') as inn(inn)
cross apply inn.nodes('top/atbat') as itop(itop)
cross apply itop.nodes('pitch') as itoppit(itoppit)
union
select
i.GamePK
,inn.value('@num', 'int') as inning
,ibot.value('0', 'int') as IsTop
,ibot.value('@num', 'int') as abNum
,ibot.value('@batter', 'int') as batter
-- clip
,ibotpit.value('@des', 'varchar(32)') as pitdesc
,ibotpit.value('@id', 'int') as seq
,ibotpit.value('@type', 'varchar(8)') as pittype
--clip
from tblInnings i
cross apply PBP.nodes('/inning') as inn(inn)
cross apply inn.nodes('bottom/atbat') as ibot(ibot)
cross apply ibot.nodes('pitch') as ibotpit(ibotpit)
注意,它都将依赖你如何访问你的数据。如果您需要快速查找,您需要提取数据并将其存储在自己的列中并正确编制索引。 XML用于通用数据存储。 – Rgwan 2013-04-10 23:40:56