Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 从表数据创建XML元素和值_Sql Server_Xml_Sql Server 2008 R2 - Fatal编程技术网

Sql server 从表数据创建XML元素和值

Sql server 从表数据创建XML元素和值,sql-server,xml,sql-server-2008-r2,Sql Server,Xml,Sql Server 2008 R2,我有一个存储数据的表: declare @t table ( el nvarchar(50), val nvarchar(50) ) insert into @t values ('n1', 'value 1'), ('n2', 'value 2'), ('n3', 'value 3 <>') declare@t表 ( 艾尔·纳瓦尔(50岁), 瓦尔·纳瓦尔(50) ) 插入@t值('n1','value 1'),('n2','va

我有一个存储数据的表:

declare @t table
    (
        el nvarchar(50), 
        val nvarchar(50)
    )
insert into @t values ('n1', 'value 1'), ('n2', 'value 2'), ('n3', 'value 3 <>')
declare@t表
(
艾尔·纳瓦尔(50岁),
瓦尔·纳瓦尔(50)
)
插入@t值('n1','value 1'),('n2','value 2'),('n3','value 3'))
我应该得到xml,如下所示:

<data>
  <n1>value 1</n1>
  <n2>value 2</n2>
  <n3>value 3 &lt;&gt;</n3>
</data>

值1
价值2
价值3
到目前为止,我能得到的最好结果是:

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
select cast(“”+(从@ti中选择val,其中i.el=t.el表示xml原始(“”),elements)+表示xml)
来自@t
对于XML原始(“”)、根('data')、元素,键入

你能帮忙吗?谢谢

无需在
el
上加入,您可以使用
*
删除标记名
val

选择cast(“”+(选择val作为“*”作为xml路径(“”))+“”作为xml)
来自@T
对于xml路径(“”),根(‘数据’)
结果:


值1
价值2
价值3

您可以将
val
属性转换为XML:

cast((select val for xml path(''), type) as nvarchar(max))
这将为您提供
值3
,但您可以使用replace:

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')
选择cast(“”+
替换(
强制转换((为xml路径(“”)选择val),类型)为nvarchar(max)),
'', ''), '', '') +
“”作为xml)
来自@t
对于xml路径(“”),根(‘数据’)

如果您使用的是SQL Server 2012,您可以尝试使用XML路径

    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>

肯德拉
阿隆索
肯德拉
莫雷诺
肯德拉
穆尼奥斯
肯德拉
罗梅罗
有关更多示例,请参阅

+1绝妙的把戏!是否有任何关于将
*
一起用于xml
的文档?@Andomar其中一个列值将成为元素名。你的方法不行,试试看。