存储过程 set 和 select 对变量赋值的区别 (转自Theo)

SQL Server 中对已经定义的变量赋值的方式有两种,分别是 SETSELECT

当表达式返回一个值并对一个变量进行赋值时,推荐使用 SET 方法

下表列出 SET 与 SELECT 的区别。请特别注意红色部分。

set select
同时对多个变量同时赋值 不支持 支持
表达式返回多个值时 出错 将返回的最后一个值赋给变量
表达式未返回值 变量被赋null值 变量保持原值     

 例如:

表达式返回多个值时,使用 SET赋值“报错”

表达式返回多个值时,使用 SELECT 赋值

declare @addr varchar(128)
select @addr = addr from chinadba1
print @addr --结果集中最后一个 addr 列的值
--结果: addr3
go

表达式未返回值时,使用 SET 赋值

declare @addr varchar(128)
set @addr = '初始值'
set @addr = (select addr from chinadba1 where userid = 4 )
print @addr --null值
go

表达式未返回值时,使用 SELECT 赋值

declare @addr varchar(128)
set @addr = '初始值'
select @addr = addr from chinadba1 where userid = 4
print @addr --保持原值
go

                                                                                                                     

原文地址:https://www.cnblogs.com/wangzhening6/p/14047917.html