SQL Server 中的全局变量






4.95/5 (46投票s)
SQL Server 中的全局变量列表及其在 Transact-SQL 中的用法。
引言
SQL Server 提供了大量的全局变量,在日常的 Transact-SQL 中使用它们非常有效。全局变量代表一类特殊的变量。服务器始终维护着这些变量的值。所有全局变量都代表特定于服务器或当前用户会话的信息。
全局变量名以 @@
前缀开头。您无需声明它们,因为服务器会不断维护它们。它们是系统定义的函数,您无法声明它们。
目标
本文的主要目的是将 SQL Server 2005/2008 中最常用的全局变量都收录在一篇文章中。本文将提供所有全局变量的通用参考,并附有适当的示例。
目录
- @@CONNECTIONS
- @@MAX_CONNECTIONS
- @@CPU_BUSY
- @@ERROR
- @@IDENTITY
- @@IDLE
- @@IO_BUSY
- @@LANGID
- @@LANGUAGE
- @@MAXCHARLEN
- @@PACK_RECEIVED
- @@PACK_SENT
- @@PACKET_ERRORS
- @@ROWCOUNT
- @@SERVERNAME
- @@SPID
- @@TEXTSIZE
- @@TIMETICKS
- @@TOTAL_ERRORS
- @@TOTAL_READ / @@TOTAL_WRITE
- @@TRANCOUNT
- @@VERSION
@@CONNECTIONS
自上次启动 SQL Server 以来登录或尝试登录的数量。
返回类型:int
示例
SELECT GETDATE() AS 'Today''s Date and Time',
@@CONNECTIONS AS 'Login Attempts'
输出
Today's Date and Time Login Attempts
----------------------- --------------
2009-08-19 21:44:32.140 1430
@@MAX_CONNECTIONS
在此计算机环境中可以与 SQL Server 进行的最大并发连接数。用户可以使用 sp_configure
''number of user connections'' 将 SQL Server 配置为任何小于或等于 @@max_connections
值的连接数。
返回类型:int
示例
SELECT @@MAX_CONNECTIONS AS 'Max Connections'
输出
Max Connections
---------------
32767
@@CPU_BUSY
自上次启动 SQL Server 以来,CPU 用于 SQL Server 工作的时间(以计时单位计)。
返回类型:int
示例
SELECT @@CPU_BUSY * CAST(@@TIMETICKS AS FLOAT) AS 'CPU microseconds',
GETDATE() AS 'As of' ;
输出
CPU microseconds As of
---------------------- -----------------------
2812500 2009-08-19 21:47:27.187
@@ERROR
通常用于检查最近执行语句的错误状态(成功或失败)。如果上一事务成功,则包含 0
;否则,包含系统生成的最后一个错误号。像
返回类型:int
示例
IF @@ERROR <> 0
PRINT 'Your error message';
输出
Your error message
IF @@ERROR != 0
return 这样的语句会在发生错误时退出。
每个 Transact-SQL 语句都会重置 @@error
,包括 print
语句或 if
测试,因此必须立即在要检查其成功状态的语句之后进行状态检查。
@@IDENTITY
由 insert
或 select
into 语句插入到 IDENTITY
列中的最后一个值。每次向表中插入一行时,@@identity
都会重置。如果一个语句插入了多行,@@identity
将反映最后插入行的 IDENTITY
值。如果受影响的表不包含 IDENTITY
列,则 @@identity
设置为 0
。
@@identity
的值不受 insert
或 select
into 语句失败或包含该语句的事务的回滚的影响。即使插入语句未能提交,@@identity
仍会保留插入到 IDENTITY
列中的最后一个值。
返回类型:numeric(38,0)
示例
INSERT INTO [TempE].[dbo].[CaseExpression]
([Code]) VALUES (5)
GO
SELECT @@IDENTITY AS 'Identity';
输出
Identity
---------------------------------------
5
@@IDLE
自上次启动以来,SQL Server 处于空闲状态的时间(以计时单位计)。
返回类型:int
示例
SELECT @@IDLE * CAST(@@TIMETICKS AS float) AS 'Idle microseconds',
GETDATE() AS 'as of'
输出
Idle microseconds as of
---------------------- -----------------------
11340000000 2009-08-19 22:07:19.903
@@IO_BUSY
自上次启动以来,SQL Server 用于输入和输出操作的时间(以计时单位计)。
返回类型:int
示例
SELECT @@IO_BUSY*@@TIMETICKS AS 'IO microseconds',
GETDATE() AS 'as of'
输出
IO microseconds as of
--------------- -----------------------
5906250 2009-08-19 22:09:44.013
@@LANGID
当前使用的语言的本地语言 ID(在 syslanguages.langid
中指定)。
返回类型:smallint
示例
SET LANGUAGE 'Italian'
SELECT @@LANGID AS 'Language ID'
SET LANGUAGE 'us_english'
SELECT @@LANGID AS 'Language ID'
输出
L'impostazione della lingua è stata sostituita con Italiano.
Language ID
-----------
6
Changed language setting to us_english.
Language ID
-----------
0
@@LANGUAGE
当前使用的语言的名称(在 syslanguages.name
中指定)。
返回类型:nvarchar
示例
SELECT @@LANGUAGE AS 'Language Name';
输出
Language Name
-------------
us_english
@@MAXCHARLEN
SQL Server 默认字符集中的单个字符的最大长度(以字节为单位)。
返回类型:tinyint
示例
SELECT @@MAX_PRECISION AS 'Max Precision'
输出
Max Precision
-------------
38
@@PACK_RECEIVED
自上次启动以来,SQL Server 读取的输入数据包数量。
返回类型:int
示例
SELECT @@PACK_RECEIVED AS 'Packets Received'
输出
Packets Received
----------------
8998
@@PACK_SENT
自上次启动以来,SQL Server 写入的输出数据包数量。
返回类型:int
示例
SELECT @@PACK_SENT AS 'Pack Sent'
输出
Pack Sent
-----------
9413
@@PACKET_ERRORS
SQL Server 在发送和接收数据包时发生的错误数量。
返回类型:int
示例
SELECT @@PACKET_ERRORS AS 'Packet Errors'
输出
Packet Errors
-------------
0
@@ROWCOUNT
最后一个命令受影响的行数。@@rowcount
被不返回行的任何命令(如 if
语句)设置为 0
。对于游标,@@rowcount
表示从游标结果集到客户端返回的累积行数,直到最后一个 fetch 请求。
返回类型:int
示例
IF @@ROWCOUNT = 0
PRINT 'Warning: No rows were updated';
输出
'Warning: No rows were updated'
@@SERVERNAME
本地 SQL Server 的名称。您必须使用 sp_addserver
定义服务器名称,然后重新启动 SQL Server。
返回类型:varchar
示例
SELECT @@SERVERNAME AS 'Server Name'
输出
MY_SERVER_WINDOWS_2003
@@SPID
当前进程的服务器进程 ID 号。
返回类型:smallint
示例
SELECT @@SPID AS 'ID', SYSTEM_USER AS 'Login Name', USER AS 'User Name'
输出
ID Login Name User Name
------ ----------------------------------------------------
55 MY_SERVER_WINDOWS_2003\Administrator dbo
@@TEXTSIZE
set textsize 选项的当前值,该选项指定 select
语句返回的 text 或 image 数据的最大长度(以字节为单位)。默认为 32K。
返回类型:smallint
示例
SET TEXTSIZE 2048
SELECT @@TEXTSIZE AS 'Text Size'
输出
Text Size
-----------
2048
@@TIMETICKS
每计时单位的微秒数。每个计时单位的时间量取决于机器。
返回类型:int
示例
SELECT @@TIMETICKS AS 'Time Ticks';
输出
Time Ticks
-----------
31250
@@TOTAL_ERRORS
SQL Server 在读写时发生的错误数量。
返回类型:int
示例
SELECT @@TOTAL_ERRORS AS 'Errors', GETDATE() AS 'As of'
输出
Errors As of
----------- -----------------------
0 2009-08-19 22:47:51.937
@@TOTAL_READ / @@TOTAL_WRITE
自上次启动以来,SQL Server 的磁盘读取次数。
返回类型:int
示例
SELECT @@TOTAL_READ AS 'Reads', @@TOTAL_WRITE AS 'Writes', GETDATE() AS 'As of'
输出
Reads Writes As of
----------- ----------- -----------------------
861 91 2009-08-19 23:36:26.763
@@TRANCOUNT
事务的嵌套级别。批处理中的每个 begin transaction 都会增加事务计数。当您在连锁事务模式下查询 @@trancount
时,其值永远不为零,因为查询会自动启动一个事务。
返回类型:int
示例
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
输出
0
1
2
1
0
@@VERSION
当前 SQL Server 版本的日期。
返回类型:nvarchar
示例
SELECT @@VERSION AS 'SQL Server Version'
输出
Jul 9 2008 14:43:34
Copyright (c) 1988-2008 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)
致所有白银及以上会员的通知
此目录和文章可由所有白银及以上会员编辑。我希望您能替换目录中的条目,并添加您所知道的关于 SQL Server 2005 或更高版本的所有全局变量。这将极大地帮助初学者在一个地方找到它们。
致谢
结论
我希望我们所有的朋友都能贡献。谢谢 :)
历史
- 8 月 19 日:首次发布