我使用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/