T-SQL查询进阶--变量
概述
變量對于一種語言是必不可少的一部分,當(dāng)然,對于T-SQL來講也是一樣。在簡單查詢中,往往很少用到變量,但無論對于復(fù)雜的查詢或存儲過程中,變量都是必不可少的一部分.
變量的種類
在T-SQL中,變量按生存范圍可以分為全局變量(Global Variable)和局部變量(Local Variable).
1.全局變量是由系統(tǒng)定義的,在整個SQL SERVER實例內(nèi)都能訪問到的變量.全局變量以@@作為第一個字符,用戶只能訪問,不能賦值。
2.局部變量由用戶定義,生命周期只在一個批處理內(nèi)有效。局部變量以@作為第一個字符,由用戶自己定義和賦值。
一個簡單的例子如下
因為全局變量僅僅是用于讀取系統(tǒng)的一些參數(shù),具體每個全局變量所代表的含義請Google之…本文主要介紹局部變量(也就是用戶自定義變量).
局部變量的用途
在T-SQL中,局部變量是一個存儲指定數(shù)據(jù)類型單個值的對象.T-SQL中對變量的定義實際上和大多數(shù)高級語言一樣.
局部變量在使用中常常用于以下三種用途:
1.在循環(huán)語句中記錄循環(huán)的次數(shù)或者用于控制循環(huán)的次數(shù).
2.用于存儲流程語句來控制流程走向
3.儲存存儲過程或者函數(shù)的返回值
實際上,存儲任何業(yè)務(wù)數(shù)據(jù)的局部變量都屬于這一類應(yīng)用.
局部變量的聲明
局部變量的聲明必須以"DECLARE"作為關(guān)鍵字,變量的命名必須以"@"作為變量名的第一個字符.必須為所聲明的變量提供一個數(shù)據(jù)類型和數(shù)據(jù)長度.如:
局部變量的數(shù)據(jù)類型不能為Text,ntext,和Image類型,當(dāng)對于字符型變量只提供數(shù)據(jù)類型沒有提供數(shù)據(jù)長度時,數(shù)據(jù)長度默認(rèn)為1.
一切只聲明沒有賦值的局部變量的初始值都為”NULL”.
局部變量的賦值
在T-SQL中,局部變量的賦值是通過”Set”關(guān)鍵字和”Select”關(guān)鍵字實現(xiàn)的.
實際上,使用Set或者是Select取決于下面幾個因素
1.當(dāng)對多個變量賦值時
SELECT關(guān)鍵字支持多個變量賦值,而SET關(guān)鍵字只支持一次對一個值賦值
2.當(dāng)賦值時表達(dá)式返回值的個數(shù)
使用SET進(jìn)行賦值時,當(dāng)表達(dá)式返回多個值時,報錯.而SELECT關(guān)鍵字在賦值表達(dá)式返回多個值時,取最后一個.
比如,假設(shè)XXX表只有以下幾條數(shù)據(jù):
當(dāng)使用SELECT關(guān)鍵字進(jìn)行時,可以取返回值的最后一個。
3.當(dāng)表達(dá)式未返回值時
使用SET對局部變量賦值時,如果賦值表達(dá)式未返回值,則局部變量變?yōu)镹ULL,而SELECT對表達(dá)式賦值時,如果表達(dá)式未返回值,則局部變量保持原值.
4.當(dāng)…你是一個標(biāo)準(zhǔn)愛好者時
堅決使用SET關(guān)鍵字對局部變量賦值吧,因為SET是ANSI標(biāo)準(zhǔn)……
5.當(dāng)…你懶得記上述何時使用SET或是何時使用SELECT時
好吧,我承認(rèn)我也很懶.那你按照一個簡單的方式區(qū)別:當(dāng)你的賦值語句需要引用一個數(shù)據(jù)源(表)時,使用SELECT.除此之外,使用SET.
局部表變量
局部表變量是一個特殊的局部變量.和臨時表不同,局部表變量具有一切局部變量的特點.在查詢中,因為局部表變量是存在內(nèi)存中,而不是硬盤中,所以速度會遠(yuǎn)遠(yuǎn)快于臨時表或是實際表,局部表變量最多的使用時在查詢中充當(dāng)多個表做連接時的中間表,比如:
這樣會大大提高多表連接的查詢速度.
總結(jié)
本文介紹了變量種類以及局部變量的使用范圍,定義以及賦值方法.還簡單介紹了表變量。在復(fù)雜查詢中,系統(tǒng)的了解T-SQL的變量是寫出好的查詢語句必不可少的一部分。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的T-SQL查询进阶--变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 印度信实集团和中国风能的关系
- 下一篇: 部队文职体检通过后能录取了吗