欲使用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
呵呵。。。这样即能得到我们所想要的结果喽。