SQL Server 2008中的全局變數及其用法T-SQL程式中的變數分為全局變數和局部變數兩類,全局變數是由SQL Server系統定義和使用的變數。DBA和用戶可以使用全局變數的值,但不能自己定義全局變數。下麵詳細總結一下SQL Server 2008中的33個全局變數,並且寫一下示例.@@....
SQL Server 2008中的全局變數及其用法
T-SQL程式中的變數分為全局變數和局部變數兩類,全局變數是由SQL Server系統定義和使用的變數。DBA和用戶可以使用全局變數的值,但不能自己定義全局變數。下麵詳細總結一下SQL Server 2008中的33個全局變數,並且寫一下示例.
@@CONNECTIONS
返回 SQL Server 自上次啟動以來嘗試的連接數,無論連接是成功還是失敗。
返回類型 integer
備註:@@MAX_CONNECTIONS 是允許同時連接到伺服器的最大連接數。@@CONNECTIONS 隨每次登錄嘗試而增加,因此 @@CONNECTIONS 可以比 @@MAX_CONNECTIONS 大。
示例:
SELECT GETDATE() AS 'Today''s Date and Time',
@@CONNECTIONS AS 'Login Attempts'
Today's Date and Time Login Attempts
---------------------- --------------
@@CPU_BUSY
返回 SQL Server 自上次啟動後的工作時間。其結果以 CPU 時間增量或“滴答數”表示,此值為所有 CPU 時間的累積,因此,可能會超出實際占用的時間。乘以 @@TIMETICKS 即可轉換為微秒。
返回類型 integer
示例:
SELECT @@CPU_BUSY * CAST(@@TIMETICKS AS FLOAT) AS 'CPU microseconds',
GETDATE() AS 'As of' ;
CPU microseconds As of
---------------- -----------------------
@@CURSOR_ROWS
返回連接上打開的上一個游標中的當前限定行的數目。為了提高性能,Microsoft SQL Server 可非同步填充大型鍵集和靜態游標。可調用 @@CURSOR_ROWS 以確定當其被調用時檢索了游標符合條件的行數。
返回類型 integer
返回值 說明
-m 游標被非同步填充。返回值 (-m) 是鍵集中當前的行數。
-1 游標為動態游標。因為動態游標可反映所有更改,所以游標符合條件的行數不斷變化。因此,永遠不能確定已檢索到所有符合條件的行。
0 沒有已打開的游標,對於上一個打開的游標沒有符合條件的行,或上一個打開的游標已被關閉或被釋放。
n 游標已完全填充。返回值 (n) 是游標中的總行數。
USE AdventureWorks;
GO
SELECT @@CURSOR_ROWS;
DECLARE Name_Cursor CURSOR FOR
SELECT LastName ,@@CURSOR_ROWS FROM Person.Contact;
OPEN Name_Cursor;
FETCH NEXT FROM Name_Cursor;
SELECT @@CURSOR_ROWS;
CLOSE Name_Cursor;
DEALLOCATE Name_Cursor;
GO
-----------
0
LastName
---------------
Achong
-----------
-1
@@DATEFIRST
針對會話返回 SET DATEFIRST 的當前值
返回類型 tinyint
示例:
SET DATEFIRST 5;
SELECT @@DATEFIRST AS 'First Day'
,DATEPART(dw, SYSDATETIME()) AS 'Today';
First Day Today
---------------- --------------
5 2
@@DBTS
返回當前資料庫的當前 timestamp 數據類型的值。這一時間戳值在資料庫中必須是唯一的。
返回類型 varbinary
示例:
從AdventureWorks資料庫返回當前的timestamp
use AdventureWorks
go
select @@dbts
@@ERROR
返回執行的上一個 Transact-SQL 語句的錯誤號
返回類型 integer
如果前一個 Transact-SQL 語句執行沒有錯誤,則返回 0。
如果前一個語句遇到錯誤,則返回錯誤號。如果錯誤是 sys.messages 目錄視圖中的錯誤之一,則 @@ERROR 將包含 sys.messages.message_id 列中表示該錯誤的值。可以在 sys.messages 中查看與 @@ERROR 錯誤號相關的文本信息。
由於 @@ERROR 在每一條語句執行後被清除並且重置,因此應在語句驗證後立即查看它,或將其保存到一個局部變數中以備以後查看。
使用 TRY...CATCH 構造來處理錯誤。TRY...CATCH 構造也支持其他返回的錯誤信息多於 @@ERROR 的系統函數(ERROR_LINE、ERROR_MESSAGE、ERROR_PROCEDURE、ERROR_SEVERITY 和 ERROR_STATE)。TRY...CATCH 也支持 ERROR_NUMBER 函數,但不限制該函數在語句產生錯誤後立即在語句中返回錯誤號。
以下示例用 @@ERROR 在 UPDATE 語句中檢測約束檢查衝突(錯誤 #547)。
USE AdventureWorks
GO
UPDATE HumanResources.EmployeePayHistory
SET PayFrequency = 4
WHERE EmployeeID = 1;
IF @@ERROR = 547
PRINT N'A check constraint violation occurred.';
GO
在此示例中,IF...ELSE 語句在存儲過程中的 INSERT 語句後檢測 @@ERROR。@@ERROR 變數的值將決定發送給調用程式的返回代碼,以指示此過程的成功與失敗。
USE AdventureWorks;
GO
-- Drop the procedure if it already exists.
IF OBJECT_ID(N'HumanResources.usp_DeleteCandidate', N'P') IS NOT NULL
DROP PROCEDURE HumanResources.usp_DeleteCandidate;
GO
-- Create the procedure.
CREATE PROCEDURE HumanResources.usp_DeleteCandidate
(
@CandidateID INT
)
AS
-- Execute the DELETE statement.
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = @CandidateID;
-- Test the error value.
IF @@ERROR <> 0
BEGIN
-- Return 99 to the calling program to indicate failure.
PRINT N'An error occurred deleting the candidate information.';
RETURN 99;
END
ELSE
BEGIN
-- Return 0 to the calling program to indicate success.
PRINT N'The job candidate has been deleted.';
RETURN 0;
END;
GO
下麵的示例用 @@ERROR 和 @@ROWCOUNT 驗證一條 UPDATE 語句的操作。為任何可能出現的錯誤而檢驗 @@ERROR 的值,而用 @@ROWCOUNT 保證更新已成功應用於表中的某行。
USE AdventureWorks;
GO
IF OBJECT_ID(N'Purchasing.usp_ChangePurchaseOrderHeader',N'P')IS NOT NULL
DROP PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader;
GO
CREATE PROCEDURE Purchasing.usp_ChangePurchaseOrderHeader
(
@PurchaseOrderID INT
,@EmployeeID INT
)
AS
-- Declare variables used in error checking.
DECLARE @ErrorVar INT;
DECLARE @RowCountVar INT;
-- Execute the UPDATE statement.
UPDATE PurchaseOrderHeader
SET EmployeeID = @EmployeeID
WHERE PurchaseOrderID = @PurchaseOrderID;
-- Save the @@ERROR and @@ROWCOUNT values in local
-- variables before they are cleared.
SELECT @ErrorVar = @@ERROR
,@RowCountVar = @@ROWCOUNT;
-- Check for errors. If an invalid @EmployeeID was specified
-- the UPDATE statement returns a foreign-key violation error #547.
IF @ErrorVar <> 0
BEGIN
IF @ErrorVar = 547
BEGIN
PRINT N'ERROR: Invalid ID specified for new employee.';
RETURN 1;
END
ELSE
BEGIN
PRINT N'ERROR: error '
+ RTRIM(CAST(@ErrorVar AS NVARCHAR(10)))
+ N' occurred.';
RETURN 2;
END
END
-- Check the row count. @RowCountVar is set to 0
-- if an invalid @PurchaseOrderID was specified.
IF @RowCountVar = 0
BEGIN
PRINT 'Warning: The EmployeeID specified is not valid';
RETURN 1;
END
ELSE
BEGIN
PRINT 'Purchase order updated with the new employee';
RETURN 0;
END;
GO
@@FETCH_STATUS
返回針對連接當前打開的任何游標發出的上一條游標 FETCH 語句的狀態。
返回類型 integer
返回值 說明
0 FETCH 語句成功。
-1 FETCH 語句失敗或行不在結果集中。
-2 提取的行不存在。
由於 @@FETCH_STATUS 對於在一個連接上的所有游標都是全局性的,所以要謹慎使用 @@FETCH_STATUS。在執行一條 FETCH 語句後,必須在對另一游標執行另一 FETCH 語句前測試 @@FETCH_STATUS。在此連接上出現任何提取操作之前,@@FETCH_STATUS 的值沒有定義。
例如,用戶從一個游標執行一條 FETCH 語句,然後調用一個存儲過程,此存儲過程打開並處理另一個游標的結果。從被調用的存儲過程返回控制後,@@FETCH_STATUS 反映的是在存儲過程中執行的最後的 FETCH 語句的結果,而不是在存儲過程被調用之前的 FETCH 語句的結果。
以下示例用 @@FETCH_STATUS 控制一個 WHILE 迴圈中的游標活動。
DECLARE Employee_Cursor CURSOR FOR
SELECT EmployeeID, Title FROM AdventureWorks.HumanResources.Employee;
OPEN Employee_Cursor;
FETCH NEXT FROM Employee_Cursor;
WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM Employee_Cursor;
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
@@IDENTITY
返回最後插入的標識值的系統函數。
返回類型 numeric(38,0)
在一條 INSERT、SELECT INTO 或大容量複製語句完成後,@@IDENTITY 中包含語句生成的最後一個標識值。如果語句未影響任何包含標識列的表,則 @@IDENTITY 返回 NULL。如果插入了多個行,生成了多個標識值,則 @@IDENTITY 將返回最後生成的標識值。如果語句觸發了一個或多個觸發器,該觸發器又執行了生成標識值的插入操作,那麼,在語句執行後立即調用 @@IDENTITY 將返回觸發器生成的最後一個標識值。如果對包含標識列的表執行插入操作後觸發了觸發器,並且觸發器對另一個沒有標識列的表執行了插入操作,則 @@IDENTITY 將返回第一次插入的標識值。出現 INSERT 或 SELECT INTO 語句失敗或大容量複製失敗,或者事務被回滾的情況時,@@IDENTITY 值不會恢復為以前的設置。
如果語句和事務失敗,它們會更改表的當前標識,從而使標識列中的值出現不連貫現象。即使未提交試圖向表中插入值的事務,也永遠無法回滾標識值。例如,如果因 IGNORE_DUP_KEY 衝突而導致 INSERT 語句失敗,表的當前標識值仍然會增加。
@@IDENTITY、SCOPE_IDENTITY 和 IDENT_CURRENT 是相似的函數,因為他們都返回插入到表的 IDENTITY 列的最後一個值。
@@IDENTITY 和 SCOPE_IDENTITY 可以返回當前會話中的所有表中生成的最後一個標識值。但是,SCOPE_IDENTITY 只在當前作用域內返回值,而 @@IDENTITY 不限於特定的作用域。
IDENT_CURRENT 不受作用域和會話的限制,而受限於指定的表。IDENT_CURRENT 可以返回任何會話和任何作用域中為特定表生成的標識值。有關詳細信息,請參閱 IDENT_CURRENT (Transact-SQL)。
@@IDENTITY 函數的作用域是執行該函數的本地伺服器上的當前會話。此函數不能應用於遠程或鏈接伺服器。若要獲得其他伺服器上的標識值,請在遠程伺服器或鏈接伺服器上執行存儲過程,並使(在遠程或鏈接伺服器的環境中執行的)該存儲過程收集標識值,並將其返回本地伺服器上的發出調用的連接。
以下示例向包含標識列 (LocationID) 的表中插入一行,並使用 @@IDENTITY 顯示新行中使用的標識值。
USE AdventureWorks;
GO
--Display the value of LocationID in the last row in the table.
SELECT MAX(LocationID) FROM Production.Location;
GO
INSERT INTO Production.Location (Name, CostRate, Availability, ModifiedDate)
VALUES ('Damaged Goods', 5, 2.5, GETDATE());
GO
SELECT @@IDENTITY AS 'Identity';
GO
--Display the value of LocationID of the newly inserted row.
SELECT MAX(LocationID) FROM Production.Location;
GO
@@IDLE
返回 SQL Server 自上次啟動後的空閑時間。結果以 CPU 時間增量或“時鐘周期”表示,並且是所有 CPU 的累積,因此該值可能超過實際經過的時間。乘以 @@TIMETICKS 即可轉換為微秒。
返回類型 integer
以下示例將返回 SQL Server 自啟動到當前時間的空閑毫秒數。為了避免將值轉換為微秒時出現算術溢出,此示例將其中一個值轉換為 float 數據類型。
SELECT @@IDLE * CAST(@@TIMETICKS AS float) AS 'Idle microseconds',
GETDATE() AS 'as of'
Idle microseconds as of
----------------- ----------------------
@@IO_BUSY
返回自從 SQL Server 最近一次啟動以來,SQL Server 已經用於執行輸入和輸出操作的時間。其結果是 CPU 時間增量(時鐘周期),並且是所有 CPU 的累積值,所以,它可能超過實際消逝的時間。乘以 @@TIMETICKS 即可轉換為微秒。
返回類型 integer
下麵的示例返回在開始時間和當前時間之間 SQL Server 已經用於執行輸入/輸出操作的毫秒數。為了避免將值轉換為微秒時出現算術溢出,此示例將其中一個值轉換為 float 數據類型。
SELECT @@IO_BUSY*@@TIMETICKS AS 'IO microseconds',
GETDATE() AS 'as of'
IO microseconds as of
--------------- ----------------------
@@LANGID
返回當前使用的語言的本地語言標識符 (ID)。
返回類型 smallint
以下示例將當前會話的語言設置為 Italian,然後使用 @@LANGID 返回義大利語的 ID。
SET LANGUAGE 'Italian'
SELECT @@LANGID AS 'Language ID'
Changed language setting to Italiano.
Language ID
-----------
6
@@LANGUAGE
返回當前所用語言的名稱。
返回類型 nvarchar
以下示例返回當前會話的語言。
SELECT @@LANGUAGE AS 'Language Name';
Language Name
------------------------------
us_english
@@LOCK_TIMEOUT
返回當前會話的當前鎖定超時設置(毫秒)。
返回類型 integer
SET LOCK_TIMEOUT 允許應用程式設置語句等待阻塞資源的最長時間。當一條語句等待的時間長度超過 LOCK_TIMEOUT 所設置的時間長度時,被鎖住的語句將自動取消,並給應用程式返回一條錯誤消息。
如果當前會話中尚未運行 SET LOCK_TIMEOUT,@@LOCK_TIMEOUT 將返回值 -1。
以下示例顯示當未設置 LOCK_TIMEOUT 值時的結果集。
SELECT @@LOCK_TIMEOUT AS [Lock Timeout];
GO
Lock Timeout
------------
-1
該示例將 LOCK_TIMEOUT 設置為 1800 毫秒,然後調用 @@LOCK_TIMEOUT。
SET LOCK_TIMEOUT 1800;
SELECT @@LOCK_TIMEOUT AS [Lock Timeout];
GO
Lock Timeout
------------
1800
@@MAX_CONNECTIONS
返回 SQL Server 實例允許同時進行的最大用戶連接數。返回的數值不一定是當前配置的數值。
返回類型 integer
以下示例顯示如何返回 SQL Server 實例的最大用戶連接數。
SELECT @@MAX_CONNECTIONS AS 'Max Connections'
Max Connections
---------------
32767
@@MAX_PRECISION
按照伺服器中的當前設置,返回 decimal 和 numeric 數據類型所用的精度級別。
返回類型 tinyint
預設情況下,最大精度返回 38。
SELECT @@MAX_PRECISION AS 'Max Precision'
@@NESTLEVEL
返回對本地伺服器上執行的當前存儲過程的嵌套級別(初始值為 0)。
返回類型 int
每次一個存儲過程通過引用公共語言運行時 (CLR) 常式、類型或聚合來調用另一個存儲過程或執行托管代碼時,嵌套級別都會增加。超過最大級數 32 時,事務即被終止。
下示例將創建兩個過程:一個過程調用另一個過程,一個過程顯示每個過程的 @@NESTLEVEL 設置。
USE AdventureWorks;
GO
IF OBJECT_ID (N'usp_OuterProc', N'P')IS NOT NULL
DROP PROCEDURE usp_OuterProc;
GO
IF OBJECT_ID (N'usp_InnerProc', N'P')IS NOT NULL
DROP PROCEDURE usp_InnerProc;
GO
CREATE PROCEDURE usp_InnerProc AS
SELECT @@NESTLEVEL AS 'Inner Level';
GO
CREATE PROCEDURE usp_OuterProc AS
SELECT @@NESTLEVEL AS 'Outer Level';
EXEC usp_InnerProc;
GO
EXECUTE usp_OuterProc;
GO
Outer Level
-----------
1
Inner Level
-----------
2
@@OPTIONS
返回有關當前 SET 選項的信息。
返回類型 integer
以下示例設置 NOCOUNT ON 並測試 @@OPTIONS 的值。NOCOUNT ON 選項可防止將會話中每一個語句的有關受影響行數的消息發送回請求的客戶端。@@OPTIONS 的值設置為 512 (0x0200)。這表示 NOCOUNT 選項。下麵的示例測試客戶端是否啟用了 NOCOUNT 選項。例如,它可以幫助跟蹤客戶端的性能差異。
SET NOCOUNT ON
IF @@OPTIONS & 512 > 0
RAISERROR ('Current user has SET NOCOUNT turned on.', 1, 1)
@@PACK_RECEIVED
返回 SQL Server 自上次啟動後從網路讀取的輸入數據包數。
返回類型 integer
下麵的示例說明瞭 @@PACK_RECEIVED 的用法
SELECT @@PACK_RECEIVED AS 'Packets Received'
Packets Received
----------------
128
@@PACK_SENT
返回 SQL Server 自上次啟動後寫入網路的輸出數據包個數。
返回類型 integer
下麵的示例說明瞭 @@PACK_SENT 的用法:
SELECT @@PACK_SENT AS 'Pack Sent'
Pack Sent
-----------
291
@@PACKET_ERRORS
返回自上次啟動 SQL Server 後,在 SQL Server 連接上發生的網路數據包錯誤數。
返回類型 integer
下麵的示例顯示了使用 @@PACKET_ERRORS
SELECT @@PACKET_ERRORS AS 'Packet Errors'
Packet Errors
-------------
0
@@PROCID
返回 Transact-SQL 當前模塊的對象標識符 (ID)。Transact-SQL 模塊可以是存儲過程、用戶定義函數或觸發器。不能在 CLR 模塊或進程內數據訪問介面中指定 @@PROCID 。
返回類型 int
以下示例使用 @@PROCID 作為 OBJECT_NAME 函數中的輸入參數,在 RAISERROR 消息中返回存儲過程的名稱
USE AdventureWorks;
GO
IF OBJECT_ID ( 'usp_FindName', 'P' ) IS NOT NULL
DROP PROCEDURE usp_FindName;
GO
CREATE PROCEDURE usp_FindName
@lastname varchar(40) = '%',
@firstname varchar(20) = '%'
AS
DECLARE @Count int;
DECLARE @ProcName nvarchar(128);
SELECT LastName, FirstName, Phone, EmailAddress
FROM Person.Contact
WHERE FirstName LIKE @firstname AND LastName LIKE @lastname;
SET @Count = @@ROWCOUNT;
SET @ProcName = OBJECT_NAME(@@PROCID);
RAISERROR ('Stored procedure %s returned %d rows.', 16,10, @ProcName, @Count);
GO
EXECUTE dbo.usp_FindName 'P%', 'A%';
@@REMSERVER
此功能將刪除
@@ROWCOUNT
返回受上一語句影響的行數。如果行數大於 20 億,請使用 ROWCOUNT_BIG。
返回類型 int
Transact-SQL 語句可以通過下列方式設置 @@ROWCOUNT 的值:
將 @@ROWCOUNT 設置為受影響或被讀取的行的數目。可以將行發送到客戶端,也可以不發送。
保留前一個語句執行中的 @@ROWCOUNT。
將 @@ROWCOUNT 重置為 0 但不將該值返回到客戶端。
執行簡單分配的語句始終將 @@ROWCOUNT 值設置為 1。不將任何行發送到客戶端。這些語句的示例如下:SET @local_variable、RETURN、READTEXT 以及不帶查詢 Select 語句,如 SELECT GETDATE() 或 SELECT 'Generic Text'。
在查詢中執行分配或使用 RETURN 的語句將 @@ROWCOUNT 值設置為受查詢影響或由查詢讀取的行數,例如:SELECT @local_variable = c1 FROM t1。
數據操作語言 (DML) 語句將 @@ROWCOUNT 值設置為受查詢影響的行數,並將該值返回到客戶端。DML 語句不會將任何行發送到客戶端。
DECLARE CURSOR 和 FETCH 將 @@ROWCOUNT 值設置為 1。
EXECUTE 語句保留前一個 @@ROWCOUNT。
USE、SET
、DEALLOCATE CURSOR、CLOSE CURSOR、BEGIN TRANSACTION 或 COMMIT TRANSACTION 等語句將 ROWCOUNT 值重置為 0。
USE AdventureWorks;
GO
UPDATE HumanResources.Employee
SET Title = N'Executive'
WHERE NationalIDNumber = 123456789
IF @@ROWCOUNT = 0
PRINT 'Warning: No rows were updated';
GO
@@SERVERNAME
返回運行 SQL Server 的本地伺服器的名稱。
返回類型 nvarchar
SQL Server 安裝程式在安裝時將伺服器名設置為電腦名。若要更改伺服器的名稱,請使用 sp_addserver,然後重新啟動 SQL Server。
安裝了多個 SQL Server 實例時,如果本地伺服器名自安裝後未發生更改,則 @@SERVERNAME 返回以下本地伺服器名信息。
實例 伺服器信息
預設實例 'servername'
命名實例 'servername\instancename'
故障轉移群集實例 - 預設實例 'virtualservername'
故障轉移群集實例 - 命名實例 'virtualservername\instancename'
儘管 @@SERVERNAME 函數和 SERVERPROPERTY 函數的 SERVERNAME 屬性可能返回相似格式的字元串,但信息會有所不同。SERVERNAME 屬性自動報告電腦網路名的更改。
相比之下,@@SERVERNAME 不報告此更改。@@SERVERNAME 報告使用 sp_addserver 或 sp_dropserver 存儲過程對本地伺服器名所做的更改。
SELECT @@SERVERNAME AS 'Server Name'
Server Name
---------------------------------
ACCTG
@@SERVICENAME
返回 SQL Server 正在其下運行的註冊表項的名稱。若當前實例為預設實例,則 @@SERVICENAME 返回 MSSQLSERVER;若當前實例是命名實例,則該函數返回該實例名。
返回類型 nvarchar
SELECT @@SERVICENAME AS 'Service Name'
Service Name
------------------------------
MSSQLSERVER
@@SPID
返回當前用戶進程的會話 ID。
返回類型 smallint
SELECT @@SPID AS 'ID', SYSTEM_USER AS 'Login Name', USER AS 'User Name'
ID Login Name User Name
------ ------------------------------ ------------------------------
@@TEXTSIZE
返回 TEXTSIZE 選項的當前值。
返回類型 integer
以下示例使用 SELECT 語句來顯示使用 SET TEXTSIZE 語句更改前後的 @@TEXTSIZE 值
-- Set the TEXTSIZE option to the default size of 4096 bytes.
SET TEXTSIZE 0
SELECT @@TEXTSIZE AS 'Text Size'
SET TEXTSIZE 2048
SELECT @@TEXTSIZE AS 'Text Size'
Text Size
-----------
4096
Text Size
-----------
@@TIMETICKS
返回每個時鐘周期的微秒數。
返回類型 integer
每個時鐘周期的時間量依賴於電腦。操作系統的一個時鐘周期是 31.25 毫秒,或是三十分之一秒。
@@TOTAL_ERRORS
返回自上次啟動 SQL Server 之後 SQL Server 所遇到的磁碟寫入錯誤數。
返回類型 integer
@@TOTAL_READ
返回 SQL Server 自上次啟動後由 SQL Server 讀取(非緩存讀取)的磁碟的數目。
返回類型 integer
SELECT @@TOTAL_READ AS 'Reads', @@TOTAL_WRITE AS 'Writes', GETDATE() AS 'As of'
Reads Writes As of
----------- ----------- ----------------------
@@TOTAL_WRITE
返回自上次啟動 SQL Server 以來 SQL Server 所執行的磁碟寫入數。
返回類型 integer
SELECT @@TOTAL_READ AS 'Reads', @@TOTAL_WRITE AS 'Writes', GETDATE() AS 'As of'
Reads Writes As of
----------- ----------- ----------------------
@@TRANCOUNT
返回當前連接的活動事務數。
返回類型 integer
BEGIN TRANSACTION 語句將 @@TRANCOUNT 加 1。ROLLBACK TRANSACTION 將 @@TRANCOUNT 遞減到 0,但 ROLLBACK TRANSACTION savepoint_name 除外,它不影響 @@TRANCOUNT。COMMIT TRANSACTION 或 COMMIT WORK 將 @@TRANCOUNT 遞減 1。
下麵的示例演示嵌套的 BEGIN 和 COMMIT 語句對 @@TRANCOUNT 變數產生的效果
PRINT @@TRANCOUNT
-- The BEGIN TRAN statement will increment the
-- transaction count by 1.
BEGIN TRAN
PRINT @@TRANCOUNT
BEGIN TRAN
PRINT @@TRANCOUNT
-- The COMMIT statement will decrement the transaction count by 1.
COMMIT
PRINT @@TRANCOUNT
COMMIT
PRINT @@TRANCOUNT
--Results
--0
--1
--2
--1
--0
下麵的示例演示嵌套的 BEGIN TRAN 和 ROLLBACK 語句對 @@TRANCOUNT 變數產生的效果
PRINT @@TRANCOUNT
-- The BEGIN TRAN statement will increment the
-- transaction count by 1.
BEGIN TRAN
PRINT @@TRANCOUNT
BEGIN TRAN
PRINT @@TRANCOUNT
-- The ROLLBACK statement will clear the @@TRANCOUNT variable
-- to 0 because all active transactions will be rolled back.
ROLLBACK
PRINT @@TRANCOUNT
--Results
--0
--1
--2
--0
@@VERSION
返回當前的 SQL Server 安裝的版本、處理器體繫結構、生成日期和操作系統
返回類型 nvarchar
不喜勿噴