T-SQL 之局部變量(1)

變量的種類:

  在T-SQL中,變量按生存範圍可以分爲全局變量(Global Variable)和局部變量(Local Variable)

  1、全局變量是由系統定義的,在整個SQL Server實例內都能訪問到的變量,全部變量以@@開頭,用戶只能訪問,不能賦值。

  2、局部變量由用戶定義,生命週期只在一個批處理內有效。局部變量以@作爲第一個字符,由用戶自己定義和複製。

  示例:

複製代碼
  DECLARE @i int    --聲明一個int類型局部變量
  SET @i = 10      --通過SET對局部變量進行賦值

  DECLARE @Name nvarchar(20)    --聲明一個nvarchar(20)類型變量
  SET @Name = '張飛'

  PRINT @@VERSION     --全部變量,只能讀取,不能賦值
  SET @@VERSION = '123'    --此行代碼報錯
複製代碼

  局部變量的用途:

  •   在循環中記錄循環次數
  •   儲存存儲過程或者函數的返回值

  局部變量的聲明:

  局部變量的聲明必須以"DECLARE"作爲關鍵字,變量的命名必須以"@"作爲變量名的第一個字符.必須爲所聲明的變量提供一個數據類型和數據長度。
  如:

  DECLARE @Name nvarchar(20)

  注意:局部變量的數據類型不能爲Text,ntext,和Image類型,當對於字符型變量只提供數據類型沒有提供數據長度時,數據長度默認爲1.

  設置變量中的值:

  1、使用SET設置變量

  有兩種設置變量值方法。可以使用SELECE語句或者SET語句。從功能上看,它們的作用幾乎是相同的,不同的是SELECT語句允許元數據值來自SELECT語句中的某一列。

  DECLARE @i int,@j int
  set @i = 10;
  set @j = 20;
  select @i + @j

  用查詢到的值設置變量:

  DECLARE @i int
  SET @i = (select MAX(Age) from Person)  --當使用SET時如果返回結果有多行也會報錯。同時如果返回多條記錄也報錯
  SELECT @i

  2、使用SELECT設置變量:

   當變量中存儲的信息來源於查詢時,經常使用SELECT給變量賦值,語法比較簡便。

  DECLARE @i int
  SELECT @i = 100
  SELECT @i

  查詢的信息爲變量賦值:

DECLARE @i int
SELECT @i = Age from Person_1 order by Id desc    --當返回多個值時用最後一個賦值
PRINT @i

  SELECT同時設置多個值:

  DECLARE @Name varchar(20)
  DECLARE @i int
  SELECT @i = 10, @Name = '張飛'

  3、當表達式未返回值時

  •   使用SET對局部變量賦值時,如果賦值表達式未返回值,則局部變量變爲NULL,而SELECT對表達式賦值時,如果表達式未返回值,則局部變量保持原值。
  •    一切只聲明沒有賦值的局部變量的初始值都爲”NULL”。

  例如:

  DECLARE @Name nvarchar(50) 
  SET @Name = '黃飛鴻'
  select @Name = Name from Person_1 where Id = 100    --100不存在記錄,此處如果改爲一個Id存在的,且Name列不爲null的值,則@Name變量的值就變了
  PRINT @Name  --依然打印的是黃飛鴻

  可見,當SELECT表達式賦值時,如果爲返回值,則保持原值。

  局部表變量:

  局部表變量是一個特殊的局部變量.和臨時表不同,局部表變量具有一切局部變量的特點.在查詢中,因爲局部表變量是存在內存中,而不是硬盤中,所以速度會遠遠快於臨時表或是實際表,局部表變量最多的使用時在查詢中充當多個表做連接時的中間表。

複製代碼
DECLARE @TempTable TABLE    --聲明一個局部表變量
(
    Id int,
    Name nvarchar(50)
)
INSERT INTO @TempTable     --用查詢到的作爲數據插入到局部表變量
SELECT Id,Name FROM Person_1

SELECT * FROM @TempTable    --和普通表一樣用,可以各種join,子查詢等等。
複製代碼
發佈了0 篇原創文章 · 獲贊 23 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章