官术网_书友最值得收藏!

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服務器的安裝日期、版本以及處理器的類型。

主站蜘蛛池模板: 井陉县| 陆丰市| 昔阳县| 北票市| 沙坪坝区| 西丰县| 连州市| 特克斯县| 肥东县| 兴隆县| 拉萨市| 铜鼓县| 郁南县| 宜宾县| 正镶白旗| 云梦县| 濮阳市| 宁波市| 枣庄市| 鸡西市| 宁津县| 上栗县| 高安市| 连山| 右玉县| 始兴县| 铜梁县| 资源县| 大宁县| 苗栗市| 南康市| 大埔区| 江川县| 同江市| 武穴市| 河西区| 许昌县| 茂名市| 临洮县| 浑源县| 新巴尔虎左旗|