?
本文面向對SQL SERVER中變量操作不熟悉的用戶,希望能使他們在看完本文后能對變量操作有具體和全面的認識。
?
在學習SQL SERVER的過程中,很多時候需要對某些單獨的值進行調試,這時就需要在SQL SERVER中對變量進行操作。
變量能進行的操作分定義、賦值、使用三種,下面以一段簡短的代碼作為示例:
--定義一個名稱為@I的變量,指定其類型為整數
DECLARE@IINT
--對變量@I賦值為
SET@I=3
--輸出@I的值
SELECT@I
這就是一個最簡單的變量操作,包含上述全部三種類型。但變量能進行的操作遠不止于此,下面分別進行描述:
變量聲明:
變量聲明的第一部分為關鍵字DECLARE,寫在最前面。
變量聲明的第二部分為變量名稱,必須以@開頭,后面可以跟字母、數字、中文和非系統運算符的字符,如@、$、_等。
變量聲明的第三部分為變量類型,可以定義SQL SERVER中的所有常規類型,包括各種數字類型、字符串類型、時間類型等,只有極少數特殊數據類型無法在變量中定義。
?
·變量的三個部分用分隔符分開,分隔符可以由多個空格、TAB制表符、換行符組成。
·變量名稱的大小寫不區分,@A和@a指向同一個變量,不能重復定義。關鍵字和數據類型也是大小定不區分,含義相同。
·多個變量同時定義用逗號分隔多個變量名稱和類型。如DECLARE @A INT,@B VARCHAR(50)。
·定義的變量的生命周期為同一批次或存儲過程,即:在你運行的同一批語句(也就是運行時選擇的所有語句)或存儲過程中,定義的變量都可以使用,變量名稱必須唯一。
下面給出常用的變量定義寫法,以下變量的聲明方式都是合法的:
DECLARE@AINT,@BINT
--最常見的寫法
SET@A=1
--如果寫SET @A='XX'會報錯,因為XX是字符串且無法隱式轉換為數字
SET@A='23'
--用標量值函數賦值
SET@A=DBO.FUN_1(@A)
--用子查詢賦值
SET@A=(SELECTMAX(number)FROMMASTER..spt_values)
--用其它函數賦值
SET@A=@B
--用表達式賦值
SET@A=@B*5+DBO.FUN_1(@A)-(SELECTMAX(number)FROMMASTER..spt_values)
變量賦值
變量的賦值有多種方式,最常見的方式是以下四種:
對單個變量賦值可以使用SET,基本寫法如下:
SET@A='XYZ'
需要注意的地方有:
·SET后的變量名稱必須在本批次中已定義,大小寫不限。
·=號后面可以寫數字、字符、標量值函數、返回一行一列的子查詢、其它變量、表達式等,但不能寫存儲過程。
·=號后返回的數據類型必須與變量的數據相同,或能隱式轉換成變量的數據類型
·SET后的變量名稱必須在本批次中已定義,大小寫不限。
?
下面給出常見的SET賦值寫法:
DECLARE@AINT,@BINT
--最常見的寫法
SET@A=1
--如果寫SET @A='XX'會報錯,因為XX是字符串且無法隱式轉換為數字
SET@A='23'
--用標量值函數賦值
SET@A=DBO.FUN_1(@A)
--用子查詢賦值
SET@A=(SELECTMAX(number)FROMMASTER..spt_values)
--用其它函數賦值
SET@A=@B
--用表達式賦值
SET@A=@B*5+DBO.FUN_1(@A)-(SELECTMAX(number)FROMMASTER..spt_values)
?
SELECT可以被認為是基于SET的強化賦值方式,以下寫法與上面SET的基本寫法完全等效:
SELECT@A='XYZ'
SELECT還可以對多個變量同時賦值:
SELECT@A='XYZ',@B='CC'
????SELECT還可以用查詢的結果集對變量賦值:
????????SELECT@A=NAME,@B=NAME+'X'
FROMTB_CLASS
WHERENAMELIKE'%%'
在定義存儲過程時可以將傳入的參數設定為輸出參數,然后在其中為其賦值。下面是一個簡短的例子:
CREATEPROCEDUREPROC_TEST(
@IINTOUTPUT
)
AS
SET@I=@I+1
GO
DECLARE@JINT
SET@J=5
?
EXECPROC_TEST@J OUTPUT
EXECPROC_TEST@J OUTPUT
?
SELECT@J
--7
????需要注意的是在存儲過程的定義中和執行存儲過程的語句中,OUTPUT關鍵字都是必須的,不然無法返回參數。
UPDATE里除了可以給列賦新值,還能給變量賦值,這里就涉及到一些底層的知識和高級的用法,這里不多說,只看示例即可:
????????DECLARE@IINT
?
????????UPDATETBSETCOL1='A',@I=1
?
????UPDATETBSETCOL1='B',@I=LEN(col1)WHERE COL1 LIKE'%%'
?
變量使用
變量可用的地方很多,在調試函數、存儲過程、查詢時都會用到,只要能用表達式的地方基本上都能用變量。以下是幾個典型用法:
????????DECLARE@IINT
????????SET@I=1
????????--直接輸出變量
????????SELECT@I
????????--使用變量調試函數
????????SELECTDBO.FUN_TEST2(@I)
????????--使用變量作為存儲過程的輸入參數
????????EXECPROC_TEST@I
????????--查詢中使用變量
????????SELECT*
????????FROMTB
????????WHERECOL1>@I
????????--更新中使用變量
????????UPDATETBSETCOL1=@I
????????WHERECOL1<>@I
?
以上就是變量使用的全部說明,希望能為讀者帶來幫助。
新聞熱點
疑難解答