测试数据如下:
Table Course:
ID Name
1 语文
2 数学
3 英语
想要得到的一个数据是:语文,数学,英语
以为下面的sql语句执行之后可以得到结果,结果错了。
declare @sql varchar(200) select @sql=isnull(@sql+',','')+Name from Course order by ID print @sql
执行的结果为:英语。Course表中的最后一条数据。
原因:sql server 中 select 变量赋值的机制是将查询结果的最后一条的记录的值赋给变量。order by子句确定了顺序,最后一条记录的值会被赋值给变量,赋值次数为1。而没有order by 子句,就无法确定数据顺序,这样SQL就扫描满足条件的所有记录,每扫描一次就赋值一次,于是赋值的次数为记录集的数量。
要得到示例的正确的结果,就是将order by 子句去掉。
declare @sql varchar(200) select @sql=isnull(@sql+',','')+Name from Course print @sql
posted on
浙公网安备 33010602011771号