欲使用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 

 

呵呵。。。这样即能得到我们所想要的结果喽。

 posted on 2010-03-24 11:52  dongpo  阅读(361)  评论(0编辑  收藏  举报