You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server中使用+=拼接字符串时,ORDER BY含表达式会失效

SQL Server中+=字符串拼接结合ORDER BY表达式的异常问题

这确实是SQL Server的异常行为,已在2017和2022版本中复现:使用+=运算符从结果集构建字符串时,若ORDER BY子句包含列名以外的表达式,最终只会将排序后结果集的最后一行值拼接到字符串中,而非按预期顺序拼接所有行的值。

复现脚本

USE tempdb

GO

DECLARE @T TABLE
(
    A   INT IDENTITY
,   B   VARCHAR(50)
)

INSERT @T (B)
SELECT value 
    FROM STRING_SPLIT('Now is the time for all good men to come to the aid of their country.', ' ')

DECLARE @SQL NVARCHAR(MAX) = 'Start:
'
SELECT @SQL += B + '
'
    FROM @T

SELECT @SQL

--Works with ORDER BY without an expression
SET @SQL = 'Start:
'
SELECT @SQL += B + '
'
    FROM @T
    ORDER BY A

SELECT @SQL

--Fails with an expression in ORDER BY; only returns the last row. 
SET @SQL = 'Start:
'
SELECT @SQL += B + '
'
    FROM @T
    ORDER BY LEFT(B, 1)

SELECT @SQL

--Works with STRING_AGG
SELECT @SQL = STRING_AGG(B, '
') WITHIN GROUP (ORDER BY LEFT(B, 1))
    FROM @T

SELECT @SQL

说明与替代方案

  • 当ORDER BY仅使用列名时,+=拼接行为符合预期,能按顺序拼接所有行;
  • 若需基于表达式排序并完成字符串拼接,推荐使用STRING_AGG函数,如脚本最后一段所示,该函数是SQL Server 2017及以上版本支持的官方字符串聚合方法,行为稳定且符合预期。

Bug上报方式

可通过Microsoft官方的SQL Server反馈渠道提交该问题,比如在Microsoft Learn的SQL Server相关页面提交反馈,或通过Azure反馈门户(针对SQL Server产品)提交bug报告。

内容的提问来源于stack exchange,提问作者Alan Samet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:33:20