Sql选择查询使用for xml路径设置html标签

时间:2015-02-04 09:39:05

标签: sql sql-server-2008 tsql

我有两个查询返回包含html标记的数据。 Sql Query 1工作正常,但Sql Query 2不返回确切的html标记, 查询2数据是嵌套的html标记。

查询1:

declare @val1 nvarchar(max)
declare @val2 nvarchar(max)
set @val1='my value one';
set @val2='my value two';
select data=( select @val1 as td, '' ,@val2 as td for xml path('tr'))

输出:

<tr><td>my value one</td><td>my value two</td></tr>

查询2:

 select stuff(( select ','+'<span>'+@val1+'<span>'+@val2+'</span></span>'       
                  for xml path('')),1,1,'') as Col1

输出:

&lt;span&gt;my value one&lt;span&gt;my value two&lt;/span&gt;&lt;/span&gt;

期望输出:

<span>my value one<span>my value two</span></span>

1 个答案:

答案 0 :(得分:2)

您可以使用嵌套的replace执行此操作,如下所示:

select replace(replace(stuff(( select ','+'<span>'+@val1+'<span>'+@val2+'</span></span>'       
              for xml path('')),1,1,''), '&lt;','<'),'&gt;','>') as col1

当然,您必须记住,对于每个转义的字符序列,您需要再添加一个嵌套级别。因此,我建议您在应用程序代码中执行此操作,该代码应在标准库中具有某种HTML编码 - 解码功能。