解码来自FOR XML Sql Query的文本

时间:2015-03-23 04:50:18

标签: sql sql-server xml

假设我正在使用FOR XML子查询来允许连接和排序,此外,数据包含尖括号:

SELECT STUFF((SELECT ', ' + '<' + NAME + '>'
          FROM   [sys].[login_token]
          ORDER  BY NAME
          FOR XML PATH('')), 1, 2, '') AS Logins; 

输出类似于

&lt;\Everyone&gt;, &lt;BUILTIN\Administrators&gt;, &lt;BUILTIN\Administrators&gt;

我怎样才能解码它,就像这样:

<\Everyone>, <BUILTIN\Administrators>, <BUILTIN\Administrators>,

2 个答案:

答案 0 :(得分:3)

您可以对XML进行查询并返回转换后的值!

SELECT STUFF((SELECT ', ' + '<' + NAME + '>'
          FROM   [sys].[login_token]
          ORDER  BY NAME
          FOR XML PATH(''), type).value('.','NVARCHAR(MAX)')
          , 1, 2, '') AS Logins; 

您将, type添加到FOR XML PATH规范,然后将.value添加到XQuery表达式和要转换为的数据类型!请参阅MSDN:

https://msdn.microsoft.com/en-us/library/ms178030.aspx

答案 1 :(得分:0)

你也可以使用2个replace函数:

SELECT replace(replace(STUFF((SELECT ', ' + '<' + NAME + '>'
          FROM   [sys].[login_token]
          ORDER  BY NAME
          FOR XML PATH('')), 1, 2, ''),'&lt;','<'),'&gt;','>') AS Logins;