T-SQL查詢進(jìn)階--變量
概述
變量對(duì)于一種語(yǔ)言是必不可少的一部分,當(dāng)然,對(duì)于T-SQL來(lái)講也是一樣。在簡(jiǎn)單查詢中,往往很少用到變量,但無(wú)論對(duì)于復(fù)雜的查詢或存儲(chǔ)過(guò)程中,變量都是必不可少的一部分.
變量的種類
在T-SQL中,變量按生存范圍可以分為全局變量(Global Variable)和局部變量(Local Variable).
1.全局變量是由系統(tǒng)定義的,在整個(gè)SQL SERVER實(shí)例內(nèi)都能訪問(wèn)到的變量.全局變量以@@作為***個(gè)字符,用戶只能訪問(wèn),不能賦值。
2.局部變量由用戶定義,生命周期只在一個(gè)批處理內(nèi)有效。局部變量以@作為***個(gè)字符,由用戶自己定義和賦值。
一個(gè)簡(jiǎn)單的例子如下
因?yàn)槿肿兞績(jī)H僅是用于讀取系統(tǒng)的一些參數(shù),具體每個(gè)全局變量所代表的含義請(qǐng)Google之…本文主要介紹局部變量(也就是用戶自定義變量).
局部變量的用途
在T-SQL中,局部變量是一個(gè)存儲(chǔ)指定數(shù)據(jù)類型單個(gè)值的對(duì)象.T-SQL中對(duì)變量的定義實(shí)際上和大多數(shù)高級(jí)語(yǔ)言一樣.
局部變量在使用中常常用于以下三種用途:
1.在循環(huán)語(yǔ)句中記錄循環(huán)的次數(shù)或者用于控制循環(huán)的次數(shù).
2.用于存儲(chǔ)流程語(yǔ)句來(lái)控制流程走向
3.儲(chǔ)存存儲(chǔ)過(guò)程或者函數(shù)的返回值
實(shí)際上,存儲(chǔ)任何業(yè)務(wù)數(shù)據(jù)的局部變量都屬于這一類應(yīng)用.
#p#
局部變量的聲明
局部變量的聲明必須以"DECLEAR"作為關(guān)鍵字,變量的命名必須以"@"作為變量名的***個(gè)字符.必須為所聲明的變量提供一個(gè)數(shù)據(jù)類型和數(shù)據(jù)長(zhǎng)度.如:
局部變量的數(shù)據(jù)類型不能為Text,ntext,和Image類型,當(dāng)對(duì)于字符型變量只提供數(shù)據(jù)類型沒(méi)有提供數(shù)據(jù)長(zhǎng)度時(shí),數(shù)據(jù)長(zhǎng)度默認(rèn)為1.
一切只聲明沒(méi)有賦值的局部變量的初始值都為”NULL”.
局部變量的賦值
在T-SQL中,局部變量的賦值是通過(guò)”Set”關(guān)鍵字和”Select”關(guān)鍵字實(shí)現(xiàn)的.
實(shí)際上,使用Set或者是Select取決于下面幾個(gè)因素
1.當(dāng)對(duì)多個(gè)變量賦值時(shí)
SELECT關(guān)鍵字支持多個(gè)變量賦值,而SET關(guān)鍵字只支持一次對(duì)一個(gè)值賦值
2.當(dāng)賦值時(shí)表達(dá)式返回值的個(gè)數(shù)
使用SET進(jìn)行賦值時(shí),當(dāng)表達(dá)式返回多個(gè)值時(shí),報(bào)錯(cuò).而SELECT關(guān)鍵字在賦值表達(dá)式返回多個(gè)值時(shí),取***一個(gè).
比如,假設(shè)XXX表只有以下幾條數(shù)據(jù):
當(dāng)使用SELECT關(guān)鍵字進(jìn)行時(shí),可以取返回值的***一個(gè)。
3.當(dāng)表達(dá)式未返回值時(shí)
使用SET對(duì)局部變量賦值時(shí),如果賦值表達(dá)式未返回值,則局部變量變?yōu)镹ULL,而SELECT對(duì)表達(dá)式賦值時(shí),如果表達(dá)式未返回值,則局部變量保持原值.
4.當(dāng)…你是一個(gè)標(biāo)準(zhǔn)愛(ài)好者時(shí)
堅(jiān)決使用SET關(guān)鍵字對(duì)局部變量賦值吧,因?yàn)镾ET是ANSI標(biāo)準(zhǔn)……
5.當(dāng)…你懶得記上述何時(shí)使用SET或是何時(shí)使用SELECT時(shí)
好吧,我承認(rèn)我也很懶.那你按照一個(gè)簡(jiǎn)單的方式區(qū)別:當(dāng)你的賦值語(yǔ)句需要引用一個(gè)數(shù)據(jù)源(表)時(shí),使用SELECT.除此之外,使用SET.
#p#
局部表變量
局部表變量是一個(gè)特殊的局部變量.和臨時(shí)表不同,局部表變量具有一切局部變量的特點(diǎn).在查詢中,因?yàn)榫植勘碜兞渴谴嬖趦?nèi)存中,而不是硬盤中,所以速度會(huì)遠(yuǎn)遠(yuǎn)快于臨時(shí)表或是實(shí)際表,局部表變量最多的使用時(shí)在查詢中充當(dāng)多個(gè)表做連接時(shí)的中間表,比如:
這樣會(huì)大大提高多表連接的查詢速度.
總結(jié)
本文介紹了變量種類以及局部變量的使用范圍,定義以及賦值方法.還簡(jiǎn)單介紹了表變量。在復(fù)雜查詢中,系統(tǒng)的了解T-SQL的變量是寫(xiě)出好的查詢語(yǔ)句必不可少的一部分。
原文鏈接:http://www.cnblogs.com/CareySon/archive/2011/10/11/2207330.html
【編輯推薦】
- 數(shù)據(jù)庫(kù)點(diǎn)滴之SQL級(jí)聯(lián)刪除
- 數(shù)據(jù)庫(kù)點(diǎn)滴之精妙SQL語(yǔ)句
- SQL點(diǎn)滴之性能優(yōu)化其實(shí)沒(méi)有那么神秘
- SQL點(diǎn)滴之幾個(gè)有點(diǎn)偏的語(yǔ)句
- SQL點(diǎn)滴之如何編輯數(shù)據(jù)