国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 山东| 东山县| 洛浦县| 宁都县| 伊宁县| 襄樊市| 红安县| 靖边县| 怀集县| 合阳县| 宜宾市| 达尔| 定陶县| 宿州市| 商水县| 保德县| 延寿县| 陆川县| 元氏县| 霍邱县| 巴楚县| 淳安县| 上杭县| 仁寿县| 万源市| 武胜县| 京山县| 永吉县| 新巴尔虎左旗| 赣州市| 法库县| 嘉兴市| 林芝县| 遵化市| 阜城县| 墨脱县| 塔城市| 张家川| 广饶县| 大理市| 辽阳县|