为什么SQL Server在指定ORDER BY子句时忽略字符串连接中的vaules

kla*_*har 2 sql sql-server concatenation sql-order-by

我有下表

Created    Comment
2010/10/10 Text1 
2010/11/11 Text2
2010/12/12 Text3
Run Code Online (Sandbox Code Playgroud)

我需要将所有注释收集到单个字符串中

SELECT  @Comment = COALESCE(@Comment, '')
   + CHAR(13) + CHAR(10) + CONVERT(NVARCHAR(30), [dbo].[Comment].[Created], 101) + ': ' + ISNULL([Comment].[Text], '')
    FROM Comment
Run Code Online (Sandbox Code Playgroud)

没有订购它按预期结束工作返回所有评论.但在运行以下代码后,添加了ORDER BY子句:

SELECT  @Comment = COALESCE(@Comment, '')
   + CHAR(13) + CHAR(10) + CONVERT(NVARCHAR(30), [Created], 101) + ': ' + ISNULL([Text], '')
    FROM Comment
  ORDER BY Created
Run Code Online (Sandbox Code Playgroud)

只返回最后一条评论.有没有人知道为什么ORDER BY导致串联中的奇怪结果?

PS:如果使用FOR XML子句而不是连接,它可以正常工作是否有办法创建SQL Server函数以将子查询中的多行"连接"到单个分隔字段?.

Mar*_*ith 6

因为你依赖于无证件的行为.

微软称" 聚合连接查询的正确行为未定义. " 如果计算标量移动到计划中的错误位置,那么它就会停止工作!