gpt4 book ai didi

sqlserver存储过程中SELECT 与 SET 对变量赋值的区别

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章sqlserver存储过程中SELECT 与 SET 对变量赋值的区别由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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值 。

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值 。

go 。

最后此篇关于sqlserver存储过程中SELECT 与 SET 对变量赋值的区别的文章就讲到这里了,如果你想了解更多关于sqlserver存储过程中SELECT 与 SET 对变量赋值的区别的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com