- SQL語言從入門到精通
- 明日科技編著
- 2246字
1.4 變量
內存中存儲的可以變化的量叫作變量。為了在內存中存儲信息,用戶必須指定存儲信息的單元,并為該存儲單元命名,以方便獲取信息,這就是變量的功能。SQL語句可以使用兩種變量:一種是局部變量(Local Variable),另外一種是全局變量(Global Variable)。局部變量和全局變量的主要區(qū)別在于存儲的數(shù)據(jù)作用范圍不同。
1.4.1 局部變量
局部變量是用戶可以自定義的變量,它的作用范圍僅限于程序內部。局部變量的名稱由用戶自行定義,符合標識符命名規(guī)則,以@開頭。
1.聲明局部變量
局部變量的聲明需要使用DECLARE語句。語法格式如下:
DECLARE { @varible_name datatype [ ,… n ] }
參數(shù)說明如下。
@varible_name:局部變量的名稱,必須以@開頭,變量名形式符合SQL標識符的命名方式。
datatype:局部變量的數(shù)據(jù)類型,可以是除text、ntext或者image類型以外所有的系統(tǒng)數(shù)據(jù)類型和用戶自定義數(shù)據(jù)類型。一般來說,如果沒有特殊的用途,建議使用系統(tǒng)提供的數(shù)據(jù)類型,這樣做可以減少維護應用程序的工作量。
例如,聲明局部變量@ stuid,SQL語句如下:
DECLARE @stuid int
2.為局部變量賦值
為局部變量賦值的方式一般有兩種:一種是使用SELECT語句,一種是使用SET語句。
使用SELECT語句為變量賦值的語法格式如下:
SELECT @varible_name = expression [FROM table_name [ ,… n ] WHERE clause]
參數(shù)說明如下。
@varible_name:局部變量的名稱。
table_name:數(shù)據(jù)表的名稱。
說明
上面的SELECT語句的作用是為了給變量賦值,而不是為了從表中查詢數(shù)據(jù)。使用SELECT語句賦值時,不一定非要使用FROM關鍵字和WHERE子句。
【例1.3】 把查詢內容賦值給局部變量。(實例位置:資源包\TM\sl\1\3)
在db_mrsql數(shù)據(jù)庫中,使用SELECT查詢學生姓名是“田麗”的學生所在班級的信息情況,并將查詢到的信息賦值給局部變量@class,并把該局部變量的值用PRINT關鍵字顯示出來。SQL語句如下:
use db_mrsql --使用db_mrsql數(shù)據(jù)庫 DECLARE @class varchar(20) --聲明一個局部變量 SELECT @class=班級 FROM tb_student WHERE 姓名='田麗' PRINT '田麗同學所在班級為:'+@class --使用PRINT關鍵字顯示局部變量的值
執(zhí)行此SQL語句,運行結果如圖1.4所示。

圖1.4 把查詢內容賦值給局部變量
除以上SELECT語句的應用外,還需要注意SELECT語句賦值和查詢不能混淆。
例如,聲明一個局部變量@ b,使用SELECT關鍵字為該變量賦值,SQL語句如下:
DECLARE @b int --聲明一個局部變量名是@b SELECT @b=1 --使用SELECT關鍵字為該變量賦值
另一種為局部變量賦值的方式是使用SET語句。使用SET語句對變量賦值的常用語法如下:
{ SET @varible_name = expression } [ ,… n ]
其中,@varible_name為局部變量的名稱。
下面是一個簡單的賦值語句:
DECLARE @x char(20) SET @x = 'I Love word'
另外,還可以為多個變量一起賦值,相應的SQL語句如下:
DECLARE @x char(10), @y char(10),@z char(10) --使用DECLARE關鍵字聲明3個變量 SELECT @b='I', @c='like',@a='dog' --使用SELECT關鍵字為這3個變量賦值
注意
數(shù)據(jù)庫語言和編程語言有一些關鍵字,關鍵字是在某一環(huán)境下能夠促使某一操作發(fā)生的字符組。為避免沖突和產(chǎn)生錯誤,在命名表、列、變量以及其他對象時應避免使用關鍵字。
1.4.2 全局變量
全局變量是SQL Server系統(tǒng)內部事先定義好的變量,不用用戶參與定義,對用戶而言是只讀的。其作用范圍并不局限于某一程序,而是任何程序均可隨時調用。全局變量通常用于存儲SQL Server的配置設定值和功能統(tǒng)計數(shù)據(jù)。
SQL Server一共提供了30多個全局變量,本節(jié)只對一些常用變量的功能和使用方法進行介紹。全局變量的名稱都是以@@開頭的。
1.@@CONNECTIONS
@@CONNECTIONS用于記錄自最后一次服務器啟動以來,所有針對本服務器進行的連接數(shù)目,包括沒有連接成功的嘗試。
使用@@CONNECTIONS,系統(tǒng)管理員可以很容易地得到當天所有試圖連接本服務器的連接數(shù)目。
2.@@CUP_BUSY
@@CUP_BUSY用于記錄自最近一次服務器啟動以來,以ms為單位的CPU工作時間。
3.@@CURSOR_ROWS
@@CURSOR_ROWS用于返回在本次服務器連接中,打開游標取出數(shù)據(jù)行的數(shù)目。
4.@@DBTS
@@DBTS用于返回當前數(shù)據(jù)庫中timestamp數(shù)據(jù)類型的當前值。
5.@@ERROR
@@ERROR用于返回執(zhí)行上一條SQL語句所返回的錯誤代碼。
在SQL Server服務器執(zhí)行完一條語句后,如果該語句執(zhí)行成功,則將返回@@ERROR的值為0;如果該語句執(zhí)行過程中發(fā)生錯誤,則將返回錯誤的信息,而@@ERROR將返回相應的錯誤編號,該編號將一直保持下去,直到下一條語句執(zhí)行為止。
由于@@ERROR在每一條語句執(zhí)行后被清除并且重置,因此應在語句驗證后立即檢查它,或將其保存到一個局部變量中以備事后查看。
6.@@FETCH_STATUS
@@FETCH_STATUS用于返回上一次使用游標FETCH操作所返回的狀態(tài)值。返回值描述如表1.6所示。
表1.6 @@FETCH_STATUS返回值的描述

例如,到了最后一行數(shù)據(jù)后,還要接著提取下一行數(shù)據(jù),則返回值為?2。
7.@@IDENTITY
@@IDENTITY用于返回最近一次插入的identity列的數(shù)值,返回值是numeric。
【例1.4】 使用select @@identity顯示新行的標識值。(實例位置:資源包\TM\sl\1\4)
SQL語句如下:
use db_mrsql--使用db_mrsql數(shù)據(jù)庫 --使用@@identity顯示插入“學生編號”的數(shù)值情況 INSERT INTO tb_student03 VALUES('王自在','男','4101班','90') SELECT @@identity AS '學生編號'
執(zhí)行此SQL語句,運行結果如圖1.5所示。

圖1.5 顯示新行的標識值
8.@@IDLE
@@IDLE用于返回以ms為單位計算的SQL Server服務器自最近一次啟動以來處于停頓狀態(tài)的時間。
9.@@IO_BUSY
@@IO_BUSY用于返回以ms為單位計算的SQL Server服務器自最近一次啟動以來用在輸入和輸出上的時間。
10.@@LOCK_TIMEOUT
@@LOCK_TIMEOUT用于返回當前對數(shù)據(jù)鎖定的超時設置。
11.@@PACK_RECEIVED
@@PACK_RECEIVED用于返回SQL Server服務器自最近一次啟動以來從網(wǎng)絡上接收數(shù)據(jù)分組的數(shù)目。
12.@@PACK_SENT
@@PACK_SENT用于返回SQL Server服務器自最近一次啟動以來向網(wǎng)絡上發(fā)送數(shù)據(jù)分組的數(shù)目。
13.@@PROCID
@@PROCID用于返回當前存儲過程的ID標識。
14.@@REMSERVER
@@REMSERVER用于返回在登錄記錄中記載遠程SQL Server服務器的名字。
15.@@ROWCOUNT
@@ROWCOUNT用于返回上一條SQL語句所影響到數(shù)據(jù)行的數(shù)目。對所有不影響數(shù)據(jù)庫數(shù)據(jù)的SQL語句,該全局變量返回的結果是0。在進行數(shù)據(jù)庫編程時,經(jīng)常要檢測@@ROWCOUNT的返回值,以便明確所執(zhí)行的操作是否實現(xiàn)了目標。
16.@@SPID
@@SPID用于返回當前服務器進程的ID標識。
17.@@TOTAL_ERRORS
@@TOTAL_ERRORS用于返回自SQL Server服務器啟動以來所遇到讀寫錯誤的總數(shù)。
18.@@TOTAL_READ
@@TOTAL_READ用于返回自SQL Server服務器啟動以來讀磁盤的次數(shù)。
19.@@TOTAL_WRITE
@@TOTAL_WRITE用于返回自SQL Server服務器啟動以來寫磁盤的次數(shù)。
20.@@TRANCOUNT
@@TRANCOUNT用于返回當前連接中處于活動狀態(tài)事務的數(shù)目。
21.@@VERSION
@@VERSION用于返回當前SQL Server服務器的安裝日期、版本以及處理器的類型。
- Spring Cloud Alibaba核心技術與實戰(zhàn)案例
- Mastering JavaScript Functional Programming
- Java范例大全
- Power Up Your PowToon Studio Project
- FFmpeg入門詳解:音視頻流媒體播放器原理及應用
- Architecting the Industrial Internet
- Java程序員面試算法寶典
- TypeScript實戰(zhàn)指南
- TypeScript項目開發(fā)實戰(zhàn)
- Python機器學習算法與實戰(zhàn)
- Clojure Reactive Programming
- Getting Started with Laravel 4
- Keras深度學習實戰(zhàn)
- Test-Driven iOS Development with Swift
- INSTANT LESS CSS Preprocessor How-to