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