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

首頁 > 數(shù)據(jù)庫 > SQL Server > 正文

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

2024-08-31 00:58:25
字體:
供稿:網(wǎng)友

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

 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,狀態(tài) 1,行 2
子查詢返回的值多于一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之后,或子查詢用作表達式時,這種情況是不允許的。
*/
go
表達式返回多個值時,使用 SELECT 賦值 declare @addr varchar(128)
select @addr = addr from chinadba1
print @addr --結(jié)果集中最后一個 addr 列的值
--結(jié)果: 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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 陈巴尔虎旗| 商洛市| 精河县| 油尖旺区| 怀远县| 微山县| 尼勒克县| 嘉义县| 西华县| 渝北区| 资源县| 长寿区| 襄垣县| 大城县| 临夏市| 仁寿县| 娄底市| 辽源市| 延吉市| 玉门市| 永康市| 永昌县| 镇原县| 久治县| 瓮安县| 杂多县| 浦北县| 镇安县| 开远市| 同仁县| 东明县| 永春县| 凉城县| 西乡县| 项城市| 北京市| 襄汾县| 赤峰市| 蓝田县| 介休市| 北京市|