SQL中的全域性變數和區域性變數(@@/@)
在SQL中,我們常常使用臨時表來儲存臨時結果,對於結果是一個集合的情況,這種方法非常實用,但當結果僅僅是一個數據或者是幾個資料時,還要去建一個表,顯得就比較麻煩,另外,當一個SQL語句中的某些元素經常變化時,比如選擇條件,(至少我想)應該使用區域性變數。當然MS SQL Server的全域性變數也很有用。
>>>>區域性變數
宣告:DECLARE @local_variable data_type
@local_variable 是變數的名稱。變數名必須以 at 符 (@) 開頭。data_type 是任何由系統提供的或使用者定義的資料型別。變數不能是 text、ntext 或 image 資料型別。
示例:
use master
declare @SEL_TYPE char(2)
declare @SEL_CUNT numeric(10)
set @SEL_TYPE = 'U'/*user table*/
set @SEL_CUNT = 10
/*返回系統中使用者表的數目*/
select @SEL_CUNT = COUNT(*)
from sysobjects
where type = @SEL_TYPE
select @SEL_CUNT as 'User table ''s count'
如果要返回系統表的數目,可以用set @SEL_TYPE = 'S'
可能這個例子並不能說明使用變數的好處,我只是想說明使用方法。當一組(幾個甚至幾十個)SQL語句都使用某個變數時,就能體會到他的好處了。
>>>>全域性變數
全域性變數是系統預定義的,返回一些系統資訊,全域性變數以兩個at(@)開頭。下面是我統計了一些較為常用的變數。
@@CONNECTIONS
返回自上次啟動以來連線或試圖連線的次數。
@@CURSOR_ROWS
返回連線上最後開啟的遊標中當前存在的合格行的數量(返回被開啟的遊標中還未被讀取的有效資料行的行數)
@@DATEFIRST
返回每週第一天的數字
@@ERROR
返回最後執行的SQL 語句的錯誤程式碼。
@@FETCH_STATUS
返回被 FETCH 語句執行的最後遊標的狀態,而不是任何當前被連線開啟的遊標的狀態。
@@IDENTITY
返回最後插入的標識值
@@LANGID
返回當前所使用語言的本地語言識別符號(ID)。
@@LANGUAGE
返回當前使用的語言名。
@@LOCK_TIMEOUT
返回當前會話的當前鎖超時設定,單位為毫秒。
@@PROCID
返回當前過程的儲存過程識別符號 (ID) 。
@@ROWCOUNT
返回受上一語句影響的行數。
@@SERVERNAME
返回執行 的本地伺服器名稱。
@@SPID
返回當前使用者程序的伺服器程序識別符號 (ID)。
@@TRANCOUNT
返回當前連線的活動事務數。
@@VERSION
返回當前安裝的日期、版本和處理器型別。
@@CPU_BUSY
返回自SQL Server 最近一次啟動以來CPU 的工作時間其單位為毫秒
@@DATEFIRST
返回使用SET DATEFIRST 命令而被賦值的DATAFIRST 引數值SET DATEFIRST,命令用來指定每週的第一天是星期幾
@@DBTS
返回當前資料庫的時間戳值必須保證資料庫中時間戳的值是惟一的
@@ERROR
返回執行Transact-SQL 語句的錯誤程式碼
@@FETCH_STATUS
返回上一次FETCH 語句的狀態值
@@IDLE
返回自SQL Server 最近一次啟動以來CPU 處於空閉狀態的時間長短單位為毫秒
@@IO_BUSY
返回自SQL Server 最近一次啟動以來CPU 執行輸入輸出操作所花費的時間其單位為毫秒
@@LANGID
返回當前所使用的語言ID 值
@@LANGUAGE
返回當前使用的語言名稱
@@LOCK_TIMEOUT
返回當前會話等待鎖的時間長短其單位為毫秒
@@MAX_CONNECTIONS
返回允許連線到SQL Server 的最大連線數目
@@MAX_PRECISION
返回decimal 和numeric 資料型別的精確度
@@NESTLEVEL
返回當前執行的儲存過程的巢狀級數初始值為0
@@OPTIONS
返回當前SET 選項的資訊
@@PACK_RECEIVED
返回SQL Server 通過網路讀取的輸入包的數目
@@PACK_SENT
返回SQL Server 寫給網路的輸出包的數目
@@PACKET_ERRORS
返回網路包的錯誤數目
@@PROCID
返回當前儲存過程的ID 值
@@REMSERVER
返回遠端SQL Server 資料庫伺服器的名稱
@@SERVICENAME
返回SQL Server 正運行於哪種服務狀態之下如MSSQLServer MSDTC SQLServerAgent
@@SPID
返回當前使用者處理的伺服器處理ID 值
@@TEXTSIZE
返回SET 語句的TEXTSIZE 選項值SET 語句定義了SELECT 語句中text 或image資料型別的最大長度基本單位為位元組
@@TIMETICKS
返回每一時鐘的微秒數
@@TOTAL_ERRORS
返回磁碟讀寫錯誤數目
@@TOTAL_READ
返回磁碟讀操作的數目
@@TOTAL_WRITE
返回磁碟寫操作的數目
@@TRANCOUNT
返回當前連線中處於啟用狀態的事務數目