从 FOR XML Sql 查询中解码文本

use*_*170 4 xml sql sql-server

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

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

输出是这样的

&lt;\Everyone&gt;, &lt;BUILTIN\Administrators&gt;, &lt;BUILTIN\Administrators&gt;
Run Code Online (Sandbox Code Playgroud)

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

<\Everyone>, <BUILTIN\Administrators>, <BUILTIN\Administrators>,
Run Code Online (Sandbox Code Playgroud)

use*_*170 5

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

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

您添加, typeFOR XML PATH规范中,然后添加一个.value带有 XQuery 表达式和要转换为的数据类型!请参阅此处的 MSDN:

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