首页 > 数据库 >SqlServer中使用Select语句给变量赋值的时候需要注意的一个问题

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

时间:2023-05-26 09:45:29浏览次数:40  
标签:语句 union SqlServer 查询 Select id select 赋值

@@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

 

标签:语句,union,SqlServer,查询,Select,id,select,赋值
From: https://www.cnblogs.com/wl-blog/p/17433851.html

相关文章

  • SqlServer select 赋值问题
    @@sqlserverselect赋值 --变量赋值正确,单个数据默认为变量declare@s1varchar(20)set@s1=(selectMAX(parked_id)fromparked)--变量赋值错误,多个数据默认为数据集declare@s2varchar(20)set@s2=(selectparked_idfromparked)————————————————版权......
  • el-select @change绑定item对象
    正常写,注意的是需要在<el-select>标签上加一个属性value-key,把<el-option>的key赋值给他,如下图。  ......
  • SqlServer——临时表
    @@sqlserver临时表 SqlServer——临时表 1、表的类型:SqlServer数据库中分为两个表:永久表、临时表;通过表名的前缀区分。永久表:与物理文件、C#中的静态类 类似,任何用户均可对其执行操作并且相互影响;临时表:简单的说就是使用时创建,断开连接即自动drop。2、临时表......
  • 创建及使用一个SqlServer的用户自定义表类型(User-Defined Table Type)
    创建一个用户自定义表类型(User-DefinedTableType)CREATETYPE[dbo].[MyTypeName]ASTABLE( [Field1][nvarchar](50)NOTNULL, [Field2][nvarchar](100)NULL, [Field3][nvarchar](50)NULL, [Field4][nvarchar](20)NULL, [Field5][nvarchar](20)NULL)GO直接......
  • <el-table-column type="selection" 多选框旁边多了个点
      问题效果 解决方式 ......
  • 实例化和初始化的区别?Spring依赖注入和属性赋值
    实例化和初始化的区别Spring依赖注入IOC(给字段赋值)和Spring测试 ......
  • 10-阻塞赋值和非阻塞赋值
    1.阻塞赋值和非阻塞赋值阻塞赋值的赋值号用"="表示,对应的电路结构往往与触发边沿没有关系,只与输入电平的变化有关系,它的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其他verilog语句的干扰,直到现行的赋值完成,才允......
  • 花式赋值(两种快捷赋值方法)
    博客随笔皆为学习笔记,有诸多不足,如有错误,请帮我指出,不胜感激,我后续会补全校正一、链式赋值a=10b=10c=10d=10print(f'a:{a},b:{b},c:{c},d:{d}')a=b=c=d=10print(f'a:{a},b:{b},c:{c},d:{d}')二、交叉赋值x=100y=200temp=xx=yy=t......
  • 用jquery或js获取select标签中选中的option值及文本
    本文目录一、示例二、获取option的文本三、获取option中value的值四、代码展示一、示例<selectid="selectedTest"οnchange="doSomething();"><optionvalue="abc">北京</option><optionvalue="edf">上海</option><opt......
  • 给DropDownList赋值下拉内容
    下拉列表绑定查询的内容:DataTabledt=CustomQuery.GetTrackInResourceByWipData(Page,_ndoWIPDataSetup.Data.ToString(),_txtObjectName.Data.ToString());if(dt!=null&&dt.Rows.Count>0){......