MSSQL sql server 存储过程中赋值方式 set select 简介


一、set select 简介 及区别

set select: 关键字在sql中,都可用于对变量进行赋值操作。
set:每次只可对一个变量进行赋值操作
select:一次可对多个变量进行赋值操作
set:可将表中的单个列值赋值给变量(当表中返回对象为多个时),则会返回错误信息
select:可将表中的值赋值给一个变量(会取表中最后一行数据)
set:当被赋值的表达式为 null时,此时变量值为null
select:通过表赋值时,如果表中的值为null时,则变量值不变

应用场景:
set:mssql推荐的变量赋值关键字,常用于普通变量的赋值操作
select:常用于从表 视图 函数 等对象中赋值操作
select:常应用于一次获取多个系统变量,此时必须采用 select获取,否则获取的值可能产生异常。


二、set select 用法

2.1 set select 变量用法

create table A (keyId int identity,info varchar(20))
insert into A(info)values('a'),('b'),('c'),('d'),('e'),('f'),(null)

declare @a varchar(20) 
set @a = (select top 1 info from A)    ---单个变量赋值
print @a 
---返回a  

/*  
set @a = (select  info from A)    --- 返回错误信息

 消息 512,级别 16,状态 1,第 12 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

print @a 
*/

declare @a varchar(20) 
select @a =info from A
print @a
---返回f 最后一行的数据 空字符 


declare @a varchar(20) 
set @a='orig Value'
select @a =info from A where keyId=10000
print @a
---当select 未获取到满足条件的任何行时, 返回f  原始值  orig Value
 
  
declare @a varchar(20),@b int 
select @a =info ,@b=keyId from A where keyId=1
print @a 
print @b
---将返回 a 1
 
truncate table A 
drop table A 


declare @a int
declare @b int
/*对系统多个变量的获取,必须采用select 赋值*/
select top 10 * from t101AccInfo —[sql语句]
select @a=@@error,@b=@@rowcount —采用select 才能正确的获取前一句的 错误数和影响的行数
print @a —返回0
print @b —返回10
——————————————————————————————
declare @a int
declare @b int
select top 10 * from [表名] —-[sql语句]
set @a =@@error
set @b =@@rowCount
print @a —返回0
print @b —返回1

—采用set 赋值,获取的影响的行数永远为1