為您詳解SQL Server中的全局變量
學習SQL Server數(shù)據(jù)庫,變量是一定要掌握的概念,下面就將為您介紹SQL Server中的全局變量,供您參考,希望對您學習SQL Server數(shù)據(jù)庫有所幫助。
在SQL Server中,全局變量是一種特殊類型的變量,服務器將維護這些變量的值。全局變量以@@前綴開頭,不必進行聲明,它們屬于系統(tǒng)定義的函數(shù),自己沒有辦法定義全局變量,如果有需要,可以用變通的方法,如把你的表看做全局變量。
SQL Server 7.0 以前的版本全局變量是由系統(tǒng)提供且預先聲明的變量,通過在名稱前保留兩個 (@@) 符號區(qū)別于局部變量。SQL Server 7.0及其以后版本 Transact-SQL 全局變量為函數(shù)形式,現(xiàn)在作為函數(shù)引用。
下面就是SQL Server中一些常用的全局變量。
*******************************************************************************
select APP_NAME ( ) as w --當前會話的應用程序
select @@ERROR --返回***執(zhí)行的 Transact-SQL 語句的錯誤代碼(integer)
select @@IDENTITY --返回***插入的標識值
SELECT USER_NAME() --返回用戶數(shù)據(jù)庫用戶名
select @@ERROR --返回***執(zhí)行的 Transact-SQL 語句的錯誤代碼
SELECT @@CONNECTIONS --返回自上次SQL啟動以來連接或試圖連接的次數(shù)。
SELECT GETDATE() --當前時間
SELECT @@CPU_BUSY/100 --返回自上次啟動SQL 以來 CPU 的工作時間,單位為毫秒
USE tempdb SELECT @@DBTS as w --為當前數(shù)據(jù)庫返回當前 timestamp 數(shù)據(jù)類型的值。這一 timestamp 值保證在數(shù)據(jù)庫中是唯一的。
select @@IDENTITY as w --返回***插入的標識值
SELECT @@IDLE as w --返回SQL自上次啟動后閑置的時間,單位為毫秒
SELECT @@IO_BUSY AS w --返回SQL自上次啟動后用于執(zhí)行輸入和輸出操作的時間,單位為毫秒
SELECT @@LANGID AS w --返回當前所使用語言的本地語言標識符(ID)。
SELECT @@LANGUAGE AS w --返回當前使用的語言名
SELECT @@LOCK_TIMEOUT as w --當前會話的當前鎖超時設置,單位為毫秒。
SELECT @@MAX_CONNECTIONS as w --返回SQL上允許的同時用戶連接的***數(shù)。返回的數(shù)不必為當前配置的數(shù)值
EXEC sp_configure --顯示當前服務器的全局配置設置
SELECT @@MAX_PRECISION as w --返回 decimal 和 numeric 數(shù)據(jù)類型所用的精度級別,即該服務器中當前設置的精度。默認***精度38。#p#
select @@OPTIONS as w --返回當前 SET 選項的信息。
SELECT @@PACK_RECEIVED as w --返回SQL自啟動后從網(wǎng)絡上讀取的輸入數(shù)據(jù)包數(shù)目。
SELECT @@PACK_SENT as w --返回SQ自上次啟動后寫到網(wǎng)絡上的輸出數(shù)據(jù)包數(shù)目。
SELECT @@PACKET_ERRORS as w --返回自SQL啟動后,在SQL連接上發(fā)生的網(wǎng)絡數(shù)據(jù)包錯誤數(shù)。
SELECT @@SERVERNAME as w --返回運行SQL服務器名稱。
SELECT @@SERVICENAME as w --返回SQL正在其下運行的注冊表鍵名
SELECT @@TIMETICKS as w --返回SQL服務器一刻度的微秒數(shù)
SELECT @@TOTAL_ERRORS AS w --返回 SQL服務器自啟動后,所遇到的磁盤讀/寫錯誤數(shù)。
SELECT @@TOTAL_READ as w --返回 SQL服務器自啟動后讀取磁盤的次數(shù)。
SELECT @@TOTAL_WRITE as w --返回SQL服務器自啟動后寫入磁盤的次數(shù)。
SELECT @@TRANCOUNT as w --返回當前連接的活動事務數(shù)。
SELECT @@VERSION as w --返回SQL服務器安裝的日期、版本和處理器類型。
SELECT @@REMSERVER as w : 返回登錄記錄中記載的遠程SQL Server服務器的名稱。
SELECT @@CURSOR_ROWS as w: 返回***連接上并打開的游標中當前存在的合格行的數(shù)量。
SELECT @@PROCID as w : 返回當前存儲過程的ID值。
SELECT @@SERVICENAME as w : 返回SQL Server正運行于哪種服務狀態(tài)之下:如 MS SQLServer、MSDTC、SQLServerAgent。
SELECT @@SPID as w : 返回當前用戶處理的服務器處理ID值。
SELECT @@TEXTSIZE as w: 返回SET語句的TEXTSIZE選項值SET語句定義了SELECT語句中text或image。數(shù)據(jù)類型的***長度基本單位為字節(jié)。
SELECT @@ROWCOUNT as w : 返回受上一語句影響的行數(shù),任何不返回行的語句將這一變量設置為0。
SELECT @@DATEFIRST as w : 返回使用SET DATEFIRST命令而被賦值的DATAFIRST參數(shù)值。SET DATEFIRST命令用來指定每周的***天是星期幾。#p#
SELECT @@FETCH_STATUS as w: 返回上一次FETCH語句的狀態(tài)值。
SELECT @@NESTLEVEL as w : 返回當前執(zhí)行的存儲過程的嵌套級數(shù),初始值為0。
SELECT @@IO_BUSY as w : 返回自SQL Server***一次啟動以來CPU執(zhí)行輸入輸出操作所花費的時間(毫秒)。
********************************************************************************
以上全局變量有很多都是得到計算機相關(guān)版本對CPU及相關(guān)屬性的獲取,也有一些我們在編寫Transact-SQL經(jīng)常使用到的全局變量,下面對幾個全局變量做一下解釋:
@@DATEFIRST:看下面示例運行的結(jié)果:
SETDATEFIRST5
SELECT@@DATEFIRSTAS'firstDay',DATEPART(dw,GETDATE())AS'Today'
上面意思為設每一天的星期五為***天,那么今天是星期日,執(zhí)行的結(jié)果如下:
firstDay Today
------- -----------
5 3
@@ERROR:在使用的頻度特別高,特別在一些存儲過程的使用中,如我們在每更新一個操作都想對其異常進行判斷和檢測,這時候我產(chǎn)會根據(jù)@@ERROR的值進行判斷,如:
IF@@ERROR<>0
BEGIN
--在此拋出錯誤的異常
--退出存儲過程
END#p#
@@IDENTITY:在一條 INSERT、SELECT INTO 或大容量復制語句完成后,@@IDENTITY 中包含語句生成的***一個標識值。如果語句未影響任何包含標識列的表,則 @@IDENTITY 返回 NULL。如果插入了多個行,生成了多個標識值,則 @@IDENTITY 將返回***生成的標識值。如果語句觸發(fā)了一個或多個觸發(fā)器,該觸發(fā)器又執(zhí)行了生成標識值的插入操作,那么,在語句執(zhí)行后立即調(diào)用 @@IDENTITY 將返回觸發(fā)器生成的***一個標識值。如果對包含標識列的表執(zhí)行插入操作后觸發(fā)了觸發(fā)器,并且觸發(fā)器對另一個沒有標識列的表執(zhí)行了插入操作,則 @@IDENTITY 將返回***次插入的標識值。出現(xiàn) INSERT 或 SELECT INTO 語句失敗或大容量復制失敗,或者事務被回滾的情況時,@@IDENTITY 值不會恢復為以前的設置。
@@ROWCOUNT:返回上一語句影響的行數(shù),我們常見的就是在更新/刪除/插入或查找數(shù)據(jù)的語句后,會用這個語句進行判斷,這個變量保存了上步操作所影響的行數(shù),如:
--數(shù)據(jù)庫操作影響的行數(shù)
IF@@ROWCOUNT>0
BEGIN
--插入成功
END
【編輯推薦】