SQL中select與set的區別


下表列出 SET 與 SELECT 的區別

  SELECT SET
同時對多個變量同時賦值 支持 不支持
表達式返回多個值時 將返回的最后一個值賦給變量 出錯
表達式未返回值 變量保持原值 變量被賦null值

(1).同時對多個變量同時賦值

declare @a varchar(128), @b varchar(128)
SET @a='ABC',@b='EFG'
GO --報錯:消息 102,級別 15,狀態 1,第 3 行 ',' 附近有語法錯誤。

 

declare @a varchar(128), @b varchar(128)
SELECT @a='ABC',@b='EFG'
GO --正確運行

 

(2).表達式返回多個值時

在說明這一項前我們先創建一個要用到的表,並對其賦值,代碼如下:

 

賦值測試表--fuzhiTEST
create table fuzhiTEST(
id int ,
name varchar(128)
)
go
insert into fuzhiTEST(id,name) values(1,'name1')
insert into fuzhiTEST(id,name) values(2,'name2')
insert into fuzhiTEST(id,name) values(3,'name3')
go

 

declare @name varchar(128)
set @name = (select name from fuzhiTEST)
GO  --報錯:消息 512,級別 16,狀態 1,第 2 行
                 子查詢返回的值不止一個。當子查詢跟隨在 =、!=、<、<=、>、>= 之后,或子查詢用作表達式時,這種情況是不允許的。

 

declare @name varchar(128)
select @name =name from fuzhiTEST
print @name
GO  --正確運行:顯示 name3

 

(3).表達式未返回值

declare @name varchar(128)
set @name = 'SET初始值'
set @name = (select name from fuzhiTEST where id = 4 )
print @name
GO   --正確運行:顯示NULL

 

declare @name varchar(128)
set @name = 'SELECT初始值'
select @name = name from fuzhiTEST where id = 4
print @name --正確運行:顯示 SELECT初始值
GO

注意:SELECT 也可以將標量子查詢的值賦給變量,如果標量子查詢不返回值,則變量被置為 null 值(此時與使用 SET 賦值是完全相同的)。
對標量子查詢的概念大家可能覺得陌生,下面舉個例子說明下(對比上面綠色部分):

declare @name varchar(128)
set @name = 'SELECT初始值'
select @name =(select name from fuzhiTEST where id = 4 )
print @name --正確運行:顯示NULL
GO


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM