我正在編寫一些報告存儲過程,並且需要在SQL 2008中解析一些XML。它適用於Umbraco CMS系統,它以不適合查詢多列的特殊方式存儲其版本化數據。它也保留所有已發佈項目的XML緩存,這看起來更適合查詢。SQL - 不使用臨時表而強制轉換爲xml數據類型?
XML緩存存儲爲NText數據類型,我已經足夠好的解析了它的SQL XML庫。我的問題是 - 是否可以將多個XML行轉換爲XML數據類型,而不使用臨時表?
示例SP在下面 - 它使用臨時表。任何指針在獲取值時效率更高。
我查詢了幾次節點,所以假設每次投射都是低效的。
-- Create temporary table that uses the XML data type
create table #XmlTable (
NodeId int,
NodeXml xml
)
-- Move all XML for documents of type '1121' into there
insert into #XmlTable(NodeId, NodeXml)
select cx.* from cmsContentXml cx
join cmsContent cc on cc.nodeId = cx.nodeId
where cc.contentType = 1121
select un.text [Document Name],
xt.NodeXml.query('//node/data [@alias=''fieldOne'']').value('.', 'nvarchar(max)') [Field One],
xt.NodeXml.query('//node/data [@alias=''fieldTwo'']').value('.', 'nvarchar(max)') [Field Two],
xt.NodeXml.query('//node/data [@alias=''fieldThree'']').value('.', 'nvarchar(max)') [Field Three]
from #XmlTable xt
join umbracoNode un on un.id = xt.NodeId
-- Drop temporary table when finished
drop table #XmlTable
每個XML節點看起來幾乎相當於:提前
<node id="111">
<data alias='fieldOne'>Value 1</data>
<data alias='fieldTwo'>Value 2</data>
<data alias='fieldThree'>Value 3</data>
<data alias='fieldFour'>Value 4</data>
<data alias='fieldFive'>Value 5</data>
</node>
感謝。
有什麼不妥或有關臨時表的緩慢。我不會重寫它只是爲了避免臨時表。 – Andomar 2011-01-27 09:41:54