2012-12-07 2 views
2

У меня есть таблица с именем StoreFolder, которая содержит поле XML под названием FolderXml. Каждая строка содержит значение XML как следующее:Как форматировать XML с помощью T-SQL

<Folder FolderName="test" StoreName="TestStore" /> 

Мне нужно, чтобы получить папки в следующем формате XML:

<Folders> 
    <Folder FolderName="test1" StoreName="TestStore1" /> 
    <Folder FolderName="test2" StoreName="TestStore1" /> 
    <Folder FolderName="test3" StoreName="TestStore1" /> 
</Folders> 

Я попытался с помощью следующего SQL-оператор:

SELECT FolderXml 
FROM  StoreFolder 
FOR XML PATH(''), ROOT('Folders') 

Но он выводит следующий XML:

<Folders> 
    <FolderXml> 
    <Folder FolderName="test1" StoreName="TestStore1" /> 
    </FolderXml> 
    <FolderXml> 
    <Folder FolderName="test2" StoreName="TestStore1" /> 
    </FolderXml> 
    <FolderXml> 
    <Folder FolderName="test3" StoreName="TestStore1" /> 
    </FolderXml> 
</Folders> 

Может кто-то пожалуйста, покажите мне, как получить XML в следующем формате (с помощью T-SQL):

<Folders> 
    <Folder FolderName="test1" StoreName="TestStore1" /> 
    <Folder FolderName="test2" StoreName="TestStore1" /> 
    <Folder FolderName="test3" StoreName="TestStore1" /> 
</Folders> 

Большое спасибо

ответ

2

Вы просто отсутствуют операции преобразования/произнесения:

select Convert(Xml, FolderXml) 
    from StoreFolder 
for xml path(''), root('Folders') 

Ваш FolderXml поля в настоящее время рассматривается в качестве/NVARCHAR поле VARCHAR, а затем добавили внутри узла XML. Предварительно преобразуя его в Xml, убедитесь, что он не будет завернут в родительский тег.

+0

Фантастический. Это делает трюк. спасибо –

0
select FolderName as "@foldername",StoreName as "@StoreName" 
FROM StoreFolder 
FOR XML PATH('Folder'),ROOT('Folder') 
+0

Он не работает, поскольку данные XML хранятся в поле FolderXml. –

0
DECLARE @T TABLE(
    FolderXml XML 
) 

INSERT INTO @T VALUES 
('<Folder FolderName="test1" StoreName="TestStore1" />'), 
('<Folder FolderName="test2" StoreName="TestStore1" />'), 
('<Folder FolderName="test3" StoreName="TestStore1" />') 


SELECT (SELECT T.FolderXml) 
FROM @T AS T 
FOR XML PATH (''), ROOT('Folders') 
Смежные вопросы