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

本文探讨了在SQL中使用SELECT语句给变量赋值时遇到的问题,特别是结合ORDER BY子句时的行为差异。通过调整查询方式解决了按顺序获取列名的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

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

转载于:https://www.cnblogs.com/dongpo888/archive/2010/03/24/1693627.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值