SQL Server中常用全域性變數和系統資訊

kitesky發表於2013-05-30
在SQL Server中,全域性變數是一種特殊型別的變數,伺服器將維護這些變數的值。全域性變數以@@字首開頭,不必進行宣告,它們屬於系統定義的函式。
還有一些系統資訊的獲取方法,例如伺服器上次啟動時間。[@more@]

全域性變數名稱

描述

@@CONNECTIONS

返回 SQL Server 自上次啟動以來嘗試的連線數。

@@CPU_BUSY

返回 SQL Server 自上次啟動後的工作時間。

@@CURSOR_ROWS

返回連線上開啟的上一個遊標中的當前限定行的數目,

確定當其被呼叫時檢索了遊標符合條件的行數。

@@DATEFIRST

針對會話返回 SET DATEFIRST 的當前值,SET DATEFIRST 表示指定的

每週的第一天。

@@DBTS

返回當前資料庫的當前 timestamp 資料型別的值,

這一時間戳值在資料庫中必須是唯一的。

@@ERROR

返回執行的上一個 Transact-SQL 語句的錯誤號,

如果前一個 Transact-SQL 語句執行沒有錯誤,則返回 0

@@FETCH_STATUS

返回針對連線當前開啟的任何遊標發出的上一條遊標 FETCH

語句的狀態。

@@IDENTITY

返回上次插入的標識值。

@@IDLE

返回 SQL Server 自上次啟動後的空閒時間。結果以 CPU 時間

增量或“時鐘週期”表示,並且是所有 CPU 的累積。

@@IO_BUSY

返回自從 SQL Server 最近一次啟動以來,Microsoft SQL Server

已經用於執行輸入和輸出操作的時間。其結果是 CPU 時間增量

(時鐘週期),並且是所有 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

返回自上次啟動 SQL Server 後,在 SQL Server 連線上發生的網路

資料包錯誤數。

@@PROCID

返回 Transact-SQL 當前模組的物件識別符號 (ID)Transact-SQL

模組可以是儲存過程、使用者定義函式或觸發器。

@@REMSERVER

返回遠端 SQL Server 資料庫伺服器在登入記錄中顯示的名稱。

@@ROWCOUNT

返回受上一語句影響的行數。

@@SERVERNAME

返回執行 SQL Server 的本地伺服器的名稱。

@@SERVICENAME

返回 SQL Server 正在其下執行的登錄檔項的名稱。若當前例項為

預設例項,則 @@SERVICENAME 返回 MSSQLSERVER

@@SPID

返回當前使用者程式的會話 ID

@@TEXTSIZE

返回 SET 語句中的 TEXTSIZE 選項的當前值。

@@TIMETICKS

返回每個時鐘週期的微秒數。

@@TOTAL_ERRORS

返回 SQL Server 自上次啟動之後所遇到的磁碟寫入錯誤數。

@@TOTAL_READ

返回 SQL Server 自上次啟動後讀取磁碟(不是讀取快取記憶體)的次數。

@@TOTAL_WRITE

返回 SQL Server 自上次啟動以來所執行的磁碟寫入次數。

@@TRANCOUNT

返回當前連線的活動事務數。

@@VERSION

返回當前的 SQL Server 安裝的版本、處理器體系結構、生成日期

和作業系統。

以上全域性變數有很多都是得到計算機相關版本對CPU及相關屬性的獲取,也有一些我們在編寫Transact-SQL經常使用到的全域性變數,下面對幾個全域性變數做一下解釋:

  @@DATEFIRST:看下面示例執行的結果:

SET DATEFIRST 5
SELECT @@DATEFIRST AS ' firstDay ', DATEPART(dw, GETDATE()) AS 'Today'

  上面意思為設每一天的星期五為第一天,那麼今天是星期日,執行的結果如下:

  firstDay Today

  ------- -----------

  5 3

  @@ERROR:在使用的頻度特別高,特別在一些儲存過程的使用中,如我們在每更新一個操作都想對其異常進行判斷和檢測,這時候我產會根據@@ERROR的值進行判斷,如: 

IF @@ERROR <> 0
BEGIN
  --在此丟擲錯誤的異常
  --退出儲存過程
  END

  @@IDENTITY:在一條 INSERT、SELECT INTO 或大容量複製語句完成後,@@IDENTITY 中包含語句生成的最後一個標識值。如果語句未影響任何包含標識列的表,則 @@IDENTITY 返回 NULL。如果插入了多個行,生成了多個標識值,則 @@IDENTITY 將返回最後生成的標識值。如果語句觸發了一個或多個觸發器,該觸發器又執行了生成標識值的插入操作,那麼,在語句執行後立即呼叫 @@IDENTITY 將返回觸發器生成的最後一個標識值。如果對包含標識列的表執行插入操作後觸發了觸發器,並且觸發器對另一個沒有標識列的表執行了插入操作,則 @@IDENTITY 將返回第一次插入的標識值。出現 INSERT 或 SELECT INTO 語句失敗或大容量複製失敗,或者事務被回滾的情況時,@@IDENTITY 值不會恢復為以前的設定。

  @@ROWCOUNT:返回上一語句影響的行數,我們常見的就是在更新/刪除/插入或查詢資料的語句後,會用這個語句進行判斷,這個變數儲存了上步操作所影響的行數,如: 

--資料庫操作影響的行數
  IF @@ ROWCOUNT >0
  BEGIN
   --插入成功
  END

sys.dm_os_sys_info 取伺服器作業系統相關資訊。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-1060551/,如需轉載,請註明出處,否則將追究法律責任。

相關文章