在SQL Server中的全局變量


在SQL Server中,全局變量是一種特殊類型的變量,服務器將維護這些變量的值。全局變量以@@前綴開頭,不必進行聲明,它們屬於系統定義的配置函數,自己沒有辦法定義全局變量,如果有需要,可以用變通的方法,如把你的表看做全局變量。
 
  具體可以瀏覽:系統視圖,系統存儲過程,系統函數(聚合函數、配置函數、日期函數、數學函數、字符串函數、行集函數等),系統數據類型。

   SQL Server 7.0 以前的版本全局變量是由系統提供且預先聲明的變量,通過在名稱前保留兩個   (@@)   符號區別於局部變量。SQL Server 7.0及其以后版本 Transact-SQL 全局變量為函數形式,現在作為函數引用。
下面就是SQL Server中一些常用的全局變量。

*******************************************************************************

select APP_NAME ( ) as w --當前會話的應用程序

select @@ERROR     --返回最后執行的 Transact-SQL 語句的錯誤代碼(integer)

select @@IDENTITY    --返回最后插入的標識值

SELECT USER_NAME()     --返回用戶數據庫用戶名

select @@ERROR    --返回最后執行的 Transact-SQL 語句的錯誤代碼

SELECT @@CONNECTIONS   --返回自上次SQL啟動以來連接或試圖連接的次數。

SELECT GETDATE() --當前時間

SELECT @@CPU_BUSY/100   --返回自上次啟動SQL 以來 CPU 的工作時間,單位為毫秒

USE tempdb SELECT @@DBTS   as w   --為當前數據庫返回當前 timestamp 數據類型的值。這一 timestamp 值保證在數據庫中是唯一的。

select @@IDENTITY as w --返回最后插入的標識值

SELECT @@IDLE   as w   --返回SQL自上次啟動后閑置的時間,單位為毫秒

SELECT @@IO_BUSY AS w    --返回SQL自上次啟動后用於執行輸入和輸出操作的時間,單位為毫秒

SELECT @@LANGID AS w    --返回當前所使用語言的本地語言標識符(ID)。

SELECT @@LANGUAGE AS w    --返回當前使用的語言名

SELECT @@LOCK_TIMEOUT as w   --當前會話的當前鎖超時設置,單位為毫秒。

SELECT @@MAX_CONNECTIONS   as w   --返回SQL上允許的同時用戶連接的最大數。返回的數不必為當前配置的數值

EXEC sp_configure   --顯示當前服務器的全局配置設置

SELECT @@MAX_PRECISION as w --返回 decimal 和 numeric 數據類型所用的精度級別,即該服務器中當前設置的精度。默認最大精度38。

select @@OPTIONS   as w   --返回當前 SET 選項的信息。

SELECT @@PACK_RECEIVED as w   --返回SQL自啟動后從網絡上讀取的輸入數據包數目。

SELECT @@PACK_SENT as w   --返回SQ自上次啟動后寫到網絡上的輸出數據包數目。

SELECT @@PACKET_ERRORS as w   --返回自SQL啟動后,在SQL連接上發生的網絡數據包錯誤數。

SELECT @@SERVERNAME as w --返回運行SQL服務器名稱。

SELECT @@SERVICENAME   as w --返回SQL正在其下運行的注冊表鍵名

SELECT @@TIMETICKS   as w --返回SQL服務器一刻度的微秒數

SELECT @@TOTAL_ERRORS AS w   --返回 SQL服務器自啟動后,所遇到的磁盤讀/寫錯誤數。

SELECT @@TOTAL_READ   as w   --返回 SQL服務器自啟動后讀取磁盤的次數。

SELECT @@TOTAL_WRITE as w   --返回SQL服務器自啟動后寫入磁盤的次數。

SELECT @@TRANCOUNT   as w   --返回當前連接的活動事務數。

SELECT @@VERSION as w   --返回SQL服務器安裝的日期、版本和處理器類型。

SELECT @@REMSERVER as w : 返回登錄記錄中記載的遠程SQL Server服務器的名稱。

SELECT @@CURSOR_ROWS as w: 返回最后連接上並打開的游標中當前存在的合格行的數量。

SELECT @@PROCID   as w : 返回當前存儲過程的ID值。

SELECT @@SERVICENAME as w : 返回SQL Server正運行於哪種服務狀態之下:如 MS SQLServer、MSDTC、SQLServerAgent。

SELECT @@SPID   as w : 返回當前用戶處理的服務器處理ID值。

SELECT @@TEXTSIZE   as w: 返回SET語句的TEXTSIZE選項值SET語句定義了SELECT語句中text或image。數據類型的最大長度基本單位為字節。

SELECT @@ROWCOUNT as w : 返回受上一語句影響的行數,任何不返回行的語句將這一變量設置為0。

SELECT @@DATEFIRST   as w : 返回使用SET DATEFIRST命令而被賦值的DATAFIRST參數值。SET DATEFIRST命令用來指定每周的第一天是星期幾。

SELECT @@FETCH_STATUS as w: 返回上一次FETCH語句的狀態值。

SELECT @@NESTLEVEL   as w : 返回當前執行的存儲過程的嵌套級數,初始值為0。

SELECT @@IO_BUSY   as w : 返回自SQL Server最后一次啟動以來CPU執行輸入輸出操作所花費的時間(毫秒)。

********************************************************************************

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

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

SETDATEFIRST5
SELECT@@DATEFIRSTAS'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

 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM