SqlServer中使⽤Select语句给变量赋值的时候需要注意的⼀个问
题
我们知道在SqlServer中可以⽤Select语句给变量赋值,⽐如如下语句就为int类型的变量@id赋值
1declare@id int=-1;
2
3select@id=id from
4 (
5select1as id
6union all
7select2as id
8union all
9select3as id
10 ) as t
11
sql中select是什么意思12select@id
执⾏上⾯的代码会显⽰下⾯的查询结果,结果显⽰最后@id的值为3,那么意味着上⾯第3⾏的select语句每返回⼀⾏数据记录,sqlserver就⽤id列为@id进⾏了⼀次赋值,⽽最后⼀⾏数据记录id列为3,所以在第12⾏的查询中最后查得@id为3
那么如果上⾯第3⾏的查询语句⼀⾏结果都没有返回,那么最终在12⾏的查询中@id会是什么值呢?很多⼈可能会想到@id会为null。
接下来我们将上⾯的代码稍作更改如下,我们在第3⾏的查询中加⼊了where条件1<>1,这个条件是永远都不会被满⾜的始终为false,所以现在第3⾏的select语句⼀条记录都不会返回
1declare@id int=-1;
2
3select@id=id from
4 (
5select1as id
6union all
7select2as id
8union all
9select3as id
10 ) as t
11where1<>1
12
13select@id
我们查看⼀下现在代码的执⾏结果,我们发现结果并不为null⽽是-1,相当于第3⾏的select语句根被就没有为@id赋值,原因也很简单,因为前⾯我们说了第3⾏的select语句返回多少条记录,就会为@id赋多少次值,现在它⼀⾏记录都没有返回,那么就不会为@id赋值,所以最终@id还是为初始值-1
现在我们再将代码改为如下所⽰,将查询结果sum后的聚合值赋值给变量@id
1declare@id int=-1;
2
3select@id=sum(id) from
4 (
5select1as id
6union all
7select2as id
8union all
9select3as id
10 ) as t
11where1<>1
12
13select@id
这⼀次的结果显⽰@id为null了,原因也很简单因为第3⾏的查询最后只返回了⼀⾏为null记录,所以对@id进⾏了⼀次赋值,所以最后在13⾏的查询中@id显⽰为null
所以在使⽤Select语句为sql变量赋值的时候,⼀定要清楚变量的值是取决于select语句的查询结果,如果select语句最后⼀⾏数据都没返回,那么select语句就不会为变量赋值。如果select语句最后返回了多⾏记录,那么变量就为最后⼀⾏记录的值。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论