SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题

我们知道在SqlServer中可以用Select语句给变量赋值,比如如下语句就为int类型的变量@id赋值

 1 declare @id int=-1;
 2 
 3 select @id=id from 
 4 (
 5 select 1 as id
 6 union all 
 7 select 2 as id
 8 union all 
 9 select 3 as id
10 ) as t
11 
12 select @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语句一条记录都不会返回

 1 declare @id int=-1;
 2 
 3 select @id=id from 
 4 (
 5 select 1 as id
 6 union all 
 7 select 2 as id
 8 union all 
 9 select 3 as id
10 ) as t
11 where 1<>1
12 
13 select @id

我们查看一下现在代码的执行结果,我们发现结果并不为null而是-1,相当于第3行的select语句根被就没有为@id赋值,原因也很简单,因为前面我们说了第3行的select语句返回多少条记录,就会为@id赋多少次值,现在它一行记录都没有返回,那么就不会为@id赋值,所以最终@id还是为初始值-1

 

现在我们再将代码改为如下所示,将查询结果sum后的聚合值赋值给变量@id

 1 declare @id int=-1;
 2 
 3 select @id=sum(id) from 
 4 (
 5 select 1 as id
 6 union all 
 7 select 2 as id
 8 union all 
 9 select 3 as id
10 ) as t
11 where 1<>1
12 
13 select @id

这一次的结果显示@id为null了,原因也很简单因为第3行的查询最后只返回了一行为null记录,所以对@id进行了一次赋值,所以最后在13行的查询中@id显示为null

 

所以在使用Select语句为sql变量赋值的时候,一定要清楚变量的值是取决于select语句的查询结果,如果select语句最后一行数据都没返回,那么select语句就不会为变量赋值。如果select语句最后返回了多行记录,那么变量就为最后一行记录的值。

 

转载于:https://www.cnblogs.com/OpenCoder/p/5785108.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值