Я пишу некоторые хранимые процедуры отчетности и нуждаюсь в анализе некоторых XML в SQL 2008. Это для системы CMS Umbraco, которая хранит свои данные с версией особым способом, который не подходит для запроса многих столбцов. Он также сохраняет XML-кеш всех опубликованных элементов, что, похоже, больше подходит для запросов.SQL - литье в xml-тип данных без использования временной таблицы?
Кэш XML хранится как тип данных NText, и я смог достаточно хорошо его проанализировать с помощью XML-библиотеки SQL. Мой вопрос: Можно ли привести несколько строк 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