變數的定義

SQL Server中的變數就是一個參數,可以對這個參數進行賦值。

變數的分類

變數分為局部變數和全局變數,局部變數用@來標識,全局變數用@@來標識(常用的全局變數一般都是已經定義好的)

聲明變數

變數在使用前必須先聲明纔能夠使用。

申明局部變數語法

DECLARE @變數名 數據類型;

例如:

DECLARE @A INT;

這樣就聲明瞭一個整數型的變數@A

局部變數賦值

聲明完了變數就可以給變數賦值了,變數賦值有兩種方式SET 或 SELECT

語法

SET 變數名=值

SELECT 變數名1=值1,變數名2=值2

從上面的語法大家可能已經看出兩種賦值方式的區別了,SET只能給一個變數賦值,SELECT 可以給多個變數賦值。

例如

SET @A=3

SELECT @A=欄位名1,@B=欄位名2 FROM TABLE

變數常用場景

變數一般用作參數去給欄位賦值,即將變數的值反過來賦值給欄位。

我們以表Customers作為示例表

DECLARE @ID INT
DECLARE @NAME VARCHAR2(50)
DECLARE @ADDRESS VARCHAR2(50)
--用SET方法給變數賦值 , 此方法一次只能給一個變數賦值
SET @ID=1
--將部門ID為1的客戶姓名和地址,賦值給@NAME和@ADDRESS變數 ,此方法能一次多個變數賦值
SELECT @NAME=姓名,@ADDRESS=地址 FROM Customers WHERE 客戶ID=@ID
--查詢變數裏的結果
SELECT @NAME,@ADDRESS

結果如下:

如果我們想查詢其他ID的姓名和地址,只需要更改一下@ID的值即可。

Q:可能有人會問,我直接把值寫在客戶ID後面不就可以了嗎?為什麼寫這麼長一段內容來要使用變數呢?

這裡有兩個原因

1、使用簡便

當一個查詢裏同一個欄位需要修改的地方較多的時候,我們只需要修改這個欄位對應的變數內容,那麼所有的欄位對應的值都會一起跟著修改。

例如

要查詢學生們對應的不同老師的信息:

DECLARE @ID INT
SET @ID=1
SELECT * FROM TEST WHERE Teacher=@IDANDStudent=張三
UNION ALL
SELECT * FROM TEST WHERE Teacher=@IDANDStudent=李四
UNION ALL
SELECT * FROM TEST WHERE Teacher=@IDANDStudent=王五
UNION ALL
SELECT * FROM TEST WHERE Teacher=@IDANDStudent=馬六
UNION ALL
SELECT * FROM TEST WHERE Teacher=@IDANDStudent=趙七

我們只需要修改@ID的值,下面的所有查詢的ID都會變更。

2、可以提高查詢效率。

當我們使用查詢的使用,資料庫在執行這個查詢語句的時候,如果不使用變數來修改值,實際上是兩個查詢。

例如:

SELECT * FROM TEST WHERE Student=張三
SELECT * FROM TEST WHERE Student=李四

執行這兩個查詢,資料庫會制定兩個執行計劃,而制定執行計劃是需要消耗系統資源的。

而如果我們改成:

DECLARE @NAME VARCHAR(20)
SET @NAME=張三
SELECT * FROM TEST WHERE Student=@NAME

當我們修改@NAME的值為李四的時候,資料庫還是會使用之前的執行計劃。這樣就節省了時間。

全局變數

全局變數使用@@來表示,一般都是系統預定義的一些全局變數。常用的全局變數有

@@ERROR ——最後一個SQL錯誤的錯誤號

@@IDENTITY —–最後一次插入的標識值

@@LANGUAGE —–當前使用的語言的名稱

@@MAX_CONNECTIONS – 可以創建的同時連接的最大數目

@@ROWCOUNT —-受上一個SQL語句影響的行數

@@SERVERNAME —-本地伺服器的名稱

@@TRANSCOUNT —–當前連接打開的事物數

@@VERSION —–SQL Server的版本信息

例如查詢資料庫的版本號

PRINT @@VERSION

結果:

查詢本地伺服器的名稱

PRINT @@SERVERNAME

結果:

這些信息都存儲在全局變數中,當發生改變時,全局變數的值也會跟著改變。

以上就是變數的一些相關內容,如有什麼疑問,可以在底下留言,我會一一回復的。

批註

變數的應用範圍比較廣,特別是在存儲過程,遊標還有動態SQL中都有應用。作用也比較明顯,在查詢優化方面也是一個不錯的選擇。此外還有很多全局變數可以供我們在平時的開發中去使用,有興趣的可以去探究一下其他全局變數的用法。

歡迎關注我的公眾號:SQL資料庫開發

推薦閱讀:

相關文章