【问题标题】:Change column name generated by FOR XML PATH in SQL Server在 SQL Server 中更改 FOR XML PATH 生成的列名
【发布时间】:2021-08-22 09:01:19
【问题描述】:

我正在使用FOR XML PATH 函数将多列连接成一行。但是,我不知道如何为结果表的列名设置别名。

这是 SQL 查询:

SELECT Comment
FROM Comments
WHERE ID = 1006
FOR XML PATH('')

我尝试了以下两种生成错误消息的方法:

SELECT Comment
FROM Comments
WHERE ID = 1006
FOR XML PATH('') [Comment_Agg];

SELECT * AS Comment_Agg
FROM
    (SELECT Comment
     FROM Comments
     WHERE ID = 1006
     FOR XML PATH(''));

仅供参考,我使用的是 SSMS 18。

【问题讨论】:

  • FY我,SSMS 是无关紧要的,它只是一个使用 SQL Server 的客户端,就像任何其他应用程序一样。
  • 如果你想聚合你的字符串,为什么不使用STRING_AGG
  • @Larnu STRING_AGG 函数在 SSMS 18 中不可用
  • @user9532692 SSMS 只是一个 IDE。 SSMS 18 最高支持 SQL Server 2019,其中包括 STRING_AGG(它是在 SQL Server 2017 中添加的)。我可以向您保证,当连接到支持它的实例时,您可以在使用 SSMS 18 时使用STRING_AGG
  • @user9532692 in SSMS(或任何连接到 SQL Server 的应用程序 - 甚至是使用 osql 的命令提示符)select @@version - 如果是 14.x 或 15.x,您可以使用 string_agg跨度>

标签: sql-server ssms for-xml-path


【解决方案1】:

我google了更多,发现解决方法如下:

SELECT SUBSTRING(
(
SELECT Comment
FROM Comments
WHERE ID = 1006
FOR XML PATH('')
),1,999999) AS Comment_Agg

【讨论】:

  • 为什么不想要第一个字符?另外,请注意,您将在此处丢失前 10,000 个字符之后的所有字符。
  • 如果要删除第一个字符,stuff() 会是更好的选择。
  • @Stu 排除第一个字符是错误的。您是否知道如何在上面的查询中按 ID 添加组?我创建了一个新帖子here
【解决方案2】:

要使用FOR XML PATH 连接,列需要未命名。如果您不想要分隔符,只需添加+ ''

SELECT
 (SELECT Comment + ''   -- causes the column to be unnamed
  FROM Comments
  WHERE ID = 1006
  FOR XML PATH(''), TYPE
 ).value('text()[1]','nvarchar(max)')  -- prevents XML escaping

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-06
    • 2010-11-04
    • 2021-11-15
    • 2020-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多