SQL SERVER中變量的定義、賦值與使用


 

本文面向對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)

變量賦值

變量的賦值有多種方式,最常見的方式是以下四種:

  1. 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)

     

  2. 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 '%%'

  1. 輸出參數賦值

    在定義存儲過程時可以將傳入的參數設定為輸出參數,然后在其中為其賦值。下面是一個簡短的例子:

    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關鍵字都是必須的,不然無法返回參數。

  1. 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

 

以上就是變量使用的全部說明,希望能為讀者帶來幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM