您的位置:首页 > 其它

使用SELECT赋值时再用ORDER BY排序所产生的问题

2010-03-24 11:52 253 查看
欲使用SELECT语句给变量@ColumnNames 赋值,并使用逗号分隔开,如下语句:

select @ColumnNames = @ColumnNames + '[' + cell + '],' from #tblCell

这样完全 没有问题,会得到这样的结果:A,B,C,D,E

但是如果想要对表排序后 赋值,我的想法自然是:

select @ColumnNames = @ColumnNames + '[' + cell + '],' from #tblCell ORDER BY cell asc

可是结果确不是想要发结果,PRINT @ColumnNames时发现其值为:E,而不是A,B,C,D,E

后来百度一下才知道:

有ORDER BY子句时,对于SELECT @ColumnNames = 这种赋值处理时,SQL认为赋值处理肯定只会保留最后一条记录的结果,而ORDER BY子句确定了数据顺序,也就知道最后一条记录是那个,因此只会处理ORDER BY的最后一条记录。
当没有ORDER BY子句时,因为无法确定数据顺序,所以SQL会扫描满足条件的所有记录,这样每扫描一条记录会赋值一次,所以结果是我们所想要的。

最终解决方法:

select @ColumnNames = @ColumnNames + '[' + cell + '],' from
(select top 1000 cell from #tblCell order by cell asc) a

呵呵。。。这样即能得到我们所想要的结果喽。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: