我有下表
Created Comment
2010/10/10 Text1
2010/11/11 Text2
2010/12/12 Text3
我需要将所有评论收集到单个字符串
中SELECT @Comment = COALESCE(@Comment, '')
+ CHAR(13) + CHAR(10) + CONVERT(NVARCHAR(30), [dbo].[Comment].[Created], 101) + ': ' + ISNULL([Comment].[Text], '')
FROM Comment
如果没有订购,它按预期结束工作将返回所有评论。 但是在运行以下代码后,添加了 ORDER BY 子句:
SELECT @Comment = COALESCE(@Comment, '')
+ CHAR(13) + CHAR(10) + CONVERT(NVARCHAR(30), [Created], 101) + ': ' + ISNULL([Text], '')
FROM Comment
ORDER BY Created
仅返回最后一条评论。 有没有人知道为什么ORDER BY导致串联中的奇怪结果?
PS:如果使用 FOR XML 子句而不是连接Is there a way to create a SQL Server function to “join” multiple rows from a subquery into a single delimited field?,它可以正常工作。
答案 0 :(得分:6)
因为您依赖于无证件的行为。
微软称“The correct behavior for an aggregate concatenation query is undefined.”。如果计算标量移动到计划中的错误位置,那么它就会停止工作!