SQL中SET與SELECT賦值的區別

假定有設定變量:


DECLARE @VAR1 VARCHAR(1) 
DECLARE @VAR2 VARCHAR(2) 


1、SELECT可以在一條語句裏對多個變量同時賦值,而SET只能一次對一個變量賦值,如下:
SELECT @VAR1='Y',@VAR2='N'
-- 而SET要達到同樣的效果,需要:
SET @VAR1='Y'
SET @VAR2='N'
/*
   說到這個,SQL內置的變量:@@ERROR 和 @@ROWCOUNT必須要在一句SQL語句中捕獲。如果用set分兩句來獲取它們,將獲取不完整,這時就應該用select來獲取值。
*/


2、表達式返回多個值時,用SET將會出錯,而SELECT將取最後一個值,如下:
----以下假定Permission表有多個IsRight記錄 
SELECT @VAR1 = IsRight FROM Permission   --將取最後一個值 

SET @VAR1 = IsRight FROM Permission   --將報錯 


3、表達式無返回值時,用SET將置變量值爲NULL,用SELECT交保持變量值,如下:
----以下假定Permission記錄爲空 
SET @VAR1 = '初始值'

SELECT @VAR1 = IsRight FROM Permission   --此時@VAR1爲'初始值' 

SET  @VAR1 = (SELECT IsRight FROM Permission)   --此時@VAR1爲NULL 


4、使用標量子查詢時,如果無返回值,SET和SELECT一樣,都將置爲NULL,如下:
----以下假定Permission記錄爲空 
SET @VAR1 = '初始值'

SELECT @VAR1 =(SELECT IsRight FROM Permission )   --此時@VAR1爲NULL 

SET  @VAR1 = ( SELECT IsRight FROM Permission)   --此時@VAR1爲NULL 

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------

T-SQL中的變量分爲局部變量和全局變量,局部變量的使用也是先聲明,再賦值。而全局變量由系統定義和維護,我們可以直接使用,但是一般不定義全局變量。

局部變量
在T-SQL中,局部變量的名稱必須以標記@作爲前綴。

Declaer  @variable_name  DataType

其中@variable_name爲變量名  DataType爲數據類型。

局部變量的賦值有兩種方法:使用Set語句或Select語句。

set  @variable_name = value

Selecte  @variable_name = value

Ø  SET賦值語句一般用戶賦給變量指定的數據變量

Ø  Select賦值語句一般用於表中查詢數據,然後查詢的記錄多於一條,將把最後一條記錄的值賦給變量

建議使用Set,原因是因爲Set語句沒有結果,佔用資源少,因此,給一個變量賦值時,使用Set效率更高。

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

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

https://blog.csdn.net/xiaokui_wingfly/article/details/45228263

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章