我使用this MSDN page中的代码来创建用户定义的聚合,以在SQL Server中使用group by's连接字符串。我的要求之一是连接值的顺序与查询中的顺序相同。例如:

Value   Group
1       1
2       1
3       2
4       2

使用查询
SELECT
  dbo.Concat(tbl.Value) As Concat,
  tbl.Group
FROM
  (SELECT TOP 1000
     tblTest.*
  FROM
    tblTest
  ORDER BY
    tblTest.Value) As tbl
GROUP BY
  tbl.Group

将导致:
Concat  Group
"1,2"   1
"3,4"   2

结果似乎总是正确且符合预期,但比起我碰到this page时,它声明不能保证顺序,并且SqlUserDefinedAggregateAttribute.IsInvariantToOrder属性仅保留供将来使用。

所以我的问题是:假设字符串中的连接值可以以任何顺序结束是正确的吗?如果是这种情况,那么为什么MSDN页面上的示例代码使用IsInvariantToOrder属性?

最佳答案

我怀疑这里存在一个大问题,就是您的语句“与查询中的语句相同”-但是,您的查询从不定义(也不能定义)通过聚集的事物进行的排序(您当然可以通过对分组进行排序来对分组进行排序ORDER BY之后的GROUP BY)。除此之外,我只能说它完全基于集合(而不是有序序列),并且从技术上讲,该顺序的确是不确定的。

关于c# - SQL用户定义的聚合值保留顺序?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6596919/

10-11 23:02
查看更多