假定有設定變量:
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