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