国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

sqlserver存儲過程中SELECT 與 SET 對變量賦值的區別

2020-07-25 13:22:41
字體:
來源:轉載
供稿:網友

SQL Server推薦使用 SET 而不是 SELECT 對變量進行賦值。
當表達式返回一個值并對一個變量進行賦值時,推薦使用 SET 方法。
下表列出 SET 與 SELECT 的區別。請特別注意紅色部分。

 setselect
同時對多個變量同時賦值不支持支持
表達式返回多個值時出錯將返回的最后一個值賦給變量
表達式未返回值變量被賦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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 内黄县| 乐东| 桂东县| 中卫市| 都昌县| 杂多县| 门源| 邢台市| 通道| 天全县| 蓬溪县| 深泽县| 崇信县| 泾川县| 保德县| 军事| 岫岩| 罗源县| 阳西县| 荆门市| 佛山市| 诏安县| 沾化县| 乡城县| 高唐县| 辉县市| 镇宁| 中卫市| 天柱县| 塔河县| 板桥市| 察雅县| 尉氏县| 吉木乃县| 西吉县| 顺义区| 棋牌| 中西区| 四会市| 海城市| 阿克|