Mag*_*nus 12 c# sql clr user-defined-aggregate sql-server-2008
我使用此MSDN页面中的代码创建用户定义的聚合以group by's
在SQL Server中连接字符串.我的一个要求是连接值的顺序与查询中的顺序相同.例如:
Value Group
1 1
2 1
3 2
4 2
Run Code Online (Sandbox Code Playgroud)
使用查询
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
Run Code Online (Sandbox Code Playgroud)
会导致:
Concat Group
"1,2" 1
"3,4" 2
Run Code Online (Sandbox Code Playgroud)
结果似乎总是正确和正如预期的那样,但是我遇到的这个页面表明订单不能保证,并且该属性SqlUserDefinedAggregateAttribute.IsInvariantToOrder
仅保留供将来使用.
所以我的问题是:假设字符串中的连接值可以以任何顺序结束是否正确?
如果是这种情况,为什么MSDN页面上的示例代码使用该IsInvariantToOrder
属性?
我怀疑这里的一个大问题是你的声明"等同于查询" -但是,你的询问从来没有定义(而不能定义)由事物的顺序进行聚合(你当然可以订购团体,由具有ORDER BY
后GROUP BY
).除此之外,我只能说它完全基于一个集合(而不是一个有序的序列),从技术上讲,这个顺序确实是未定义的.