65.9K
CodeProject 正在变化。 阅读更多。
Home

SQL Server 中的全局变量

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.95/5 (46投票s)

2009年8月19日

CPOL

5分钟阅读

viewsIcon

347220

SQL Server 中的全局变量列表及其在 Transact-SQL 中的用法。

引言

SQL Server 提供了大量的全局变量,在日常的 Transact-SQL 中使用它们非常有效。全局变量代表一类特殊的变量。服务器始终维护着这些变量的值。所有全局变量都代表特定于服务器或当前用户会话的信息。

全局变量名以 @@ 前缀开头。您无需声明它们,因为服务器会不断维护它们。它们是系统定义的函数,您无法声明它们。

目标

本文的主要目的是将 SQL Server 2005/2008 中最常用的全局变量都收录在一篇文章中。本文将提供所有全局变量的通用参考,并附有适当的示例。

目录

@@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 日:首次发布
© . All rights reserved.