总结一下SQL的全局变量

        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
  2. 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

 

 

 

                                                                                    
不爱好不喷

相关文章