使用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
呵呵。。。这样即能得到我们所想要的结果喽。
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
呵呵。。。这样即能得到我们所想要的结果喽。
相关文章推荐
- DataTable 使用Select方法查询并排序,以及【拼接转义符的问题】
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- mysql :group by 与order by 共同使用时排序问题,小心utf8的排序
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- MyBatis排序时使用order by 动态参数时需要注意,用$而不是#, #{}和${}的区别以及order by注入问题
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题
- SELECT 赋值与ORDER BY冲突的问题
- 转:邹建--SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题
- SELECT 赋值与ORDER BY冲突的问题