我有一个存储数据的表:
declare @t table
(
el nvarchar(50),
val nvarchar(50)
)
insert into @t values ('n1', 'value 1'), ('n2', 'value 2'), ('n3', 'value 3 <>')
我应该得到xml,看起来像这样:
<data>
<n1>value 1</n1>
<n2>value 2</n2>
<n3>value 3 <></n3>
</data>
到目前为止我能得到的最好的是:
select cast('<' + el + '>' + (select val from @t i where i.el = t.el for xml raw(''), elements) + '</' + el + '>' as xml)
from @t t
For XML Raw(''), root('data'), Elements, Type
你可以帮忙吗?谢谢!
答案 0 :(得分:2)
无需加入el
,您可以使用*
删除标记名val
。
select cast('<'+el+'>'+(select val as '*' for xml path(''))+'</'+el+'>' as xml)
from @T
for xml path(''), root('data')
结果:
<data>
<n1>value 1</n1>
<n2>value 2</n2>
<n3>value 3 <></n3>
</data>
答案 1 :(得分:2)
您可以将val
属性转换为XML:
cast((select val for xml path(''), type) as nvarchar(max))
这将为您提供<val>value 3 <></val>
,但您可以使用替换删除<val>
代码:
select cast('<' + el + '>' +
replace(replace(
cast((select val for xml path(''), type) as nvarchar(max)),
'<val>', ''), '</val>', '') +
'</' + el + '>' as xml)
from @t
for xml path(''), root('data')
答案 2 :(得分:0)
如果您使用的是SQL Server 2012,则可以尝试使用XML PATH
SELECT TOP 1000 FirstName, LastName
FROM [AdventureWorks2012].[Person].[Person]
where FirstName like 'Ken%'
and BusinessEntityID like '1514%'
FOR XML PATH
输出
<row>
<FirstName>Kendra</FirstName>
<LastName>Alonso</LastName>
</row>
<row>
<FirstName>Kendra</FirstName>
<LastName>Moreno</LastName>
</row>
<row>
<FirstName>Kendra</FirstName>
<LastName>Munoz</LastName>
</row>
<row>
<FirstName>Kendra</FirstName>
<LastName>Romero</LastName>
</row>
有关更多示例,请参阅 http://msdn.microsoft.com/en-us/library/bb510462.aspx