SQLServer中对已经定义的变量赋值的⽅式⽤两种,分别是
SET和SELECT
SQL Server中对已经定义的变量赋值的⽅式⽤两种,分别是 SET 和 SELECT。
对于这两种⽅式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们
并没有注意,其实这两种⽅式还是有很多差别的。
SQL Server推荐使⽤ SET ⽽不是 SELECT 对变量进⾏赋值。
当表达式返回⼀个值并对⼀个变量进⾏赋值时,推荐使⽤ SET ⽅法。
下表列出 SET 与 SELECT 的区别。请特别注意红⾊部分。
set
select
同时对多个变量同时赋值
不⽀持
⽀持
表达式返回多个值时
出错
将返回的最后⼀个值赋给变量
表达式未返回值
变量被赋null值
变量保持原值
下⾯以具体⽰例来说明问题:
create table chinadba1(
userid int ,
addr varchar(128)
)
go
insert into chinadba1(userid,addr) values(1,'addr1')
insert into chinadba1(userid,addr) values(2,'addr2')
insert into chinadba1(userid,addr) values(3,'addr3')
go
表达式返回多个值时,使⽤ SET 赋值
declare @addr varchar(128)
set @addr = (select addr from chinadba1)
/*
-
-出错信息为
服务器: 消息 512,级别 16,状态 1,⾏ 2
⼦查询返回的值多于⼀个。当⼦查询跟随在 =、!=、<、<=、>、>= 之后,或⼦查询⽤作表达式时,这种情况是不允许的。
*/
go
表达式返回多个值时,使⽤ 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值
sql中select是什么意思go
表达式未返回值时,使⽤ SELECT 赋值 declare @addr varchar(128)
set @addr = '初始值'
select @addr = addr from chinadba1 where userid = 4
print @addr --保持原值
go
需要注意的是,SELECT 也可以将标量⼦查询的值赋给变量,如果标量⼦查询不返回值,则变量被置为 null 值。 此时与 使⽤ SET 赋值是完全相同的
对标量⼦查询的概念⼤家应该都觉得陌⽣,举个例⼦就能说明
declare @addr varchar(128)
set @addr = '初始值'
--select addr from chinadba1 where userid = 4 为标量⼦查询语句
select @addr = (select addr from chinadba1 where userid = 4)
print @addr --null值
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论