SQL SERVER函数大全 下载本文

go insert into #Temp values(2,'2') insert into #Temp values(4,'4') insert into #Temp values(12,'12') insert into #Temp values(19,'19') go drop table #Temp 如果分别调用MIN()与MAX()函数将会返回什么值呢?

select MIN(IntegerColumn),MAX(IntegerColumn) from #Temp select MIN(VarCharColumn),MAX(VarCharColumn) from #Temp

因为VarCharColumn中值的存储类型为字符类型,而不是数字,所以结果以每个字符的ASCII值为顺序从左到右排序。这就是12比其他值小、而4比其他值大的原因。 SUM()函数

SUM()函数是最常用的聚合函数之一,它的功能很容易理解:和AVG()函数一样,它用于数值数据类型,返回一个列范围内所有非空值的总和。 配置变量

配置变量不是函数,不过它们的用法和系统函数相同。每个全局变量都能够返回SQL Server执行环境的标量信息。以下是一些常见的例子。 @@ERROR变量

这个变量包含当前连接发生的最后一次错误的代码。在执行的语句没有错误时,

@@ERROR变量的值是0。出现标准错误时,错误是由数据库引擎引发的。所有的标准错误代码与消息都保存在sys.messages系统视图中,可以使用如下脚本查询:

SELECT * FROM sys.messages

定制错误可以通过调用RAISERROR语句来手动引发,并调用sp_addmessage系统存储过程将其添加到sysmessages表中。

以下是一个@@ERROR变量的简单例子。先试着将一个数除以0,数据库引擎会引发标准错误号为8134的错误。注意查看Results选项卡中的查询结果。在发生错误时,Management Studio的Messages选项卡将默认显示在Results选项卡的上面: SELECT 5 / 0 SELECT @@ERROR 在成功检索@@ERROR的值后,@@ERROR的值将返回0,因为@@ERROR只保存了上次执行的语句的错误代码。如果希望检索更多的错误信息,可以使用如下脚本从sysmessages视图中得到: SELECT 5 / 0 SELECT * FROM master.dbo.sysmessages WHERE error = @@ERROR 本节的后面部分内容将说明如何通过使用错误函数来更高效地返回错误数据。

除了美国英语之外,SQL Server还默认安装了其他语言。每种语言专用的错误消息都有一个语言标识符(mslangid),对应于syslanguages表中的一种语言,如下图所示。 error 8134 8134 8134 8134 8134 8134 8134 severity 16 16 16 16 16 16 16 dlevel 0 0 0 0 0 0 0 description Divide by zero error encountered. Fehler aufgrund einer Division durch Null. Division par zéro. 0 除算エラーが発生しました。 Error de división entre cero. Errore di divisione per zero. Обнаружена ошибка: деление на ноль. 8134 8134 8134 8134 16 16 16 16 0 0 0 0 Erro de divis?o por zero. 發現除以零的錯誤。 0?? ??? ??? ??????. 遇到以零作除数错误。 1046 1028 1042 2052 msglangid 1033 1031 1036 1041 3082 1040 1049 属性名mslangid被非正式地定义为Microsoft Global Language Identifier。微软公司用这个标识符来标识一种语言或语言和国家的组合,微软公司把语言和国家的组合定义为地区。例如,在随SQL Server安装的英语中,美国英语的mslangid是1033,英国英语的mslangid是2057。要检索出所有已安装的、支持的语言,可以执行下面的查询: SELECT alias, name, msglangid FROM sys.syslanguages @@SERVICENAME变量

这个变量是用于执行和维护当前SQL Server实例的Windows服务名。它通常返回SQL Server默认实例MSSQLSERVER,但SQL Server的指定实例有唯一的服务名。例如在名为WoodVista的计算机上有两个SQL Server实例:默认实例和指定实例AughtEight。如在默认实例上检索@@SERVICENAME全局变量的内容,将返回MSSQLSERVER,但在指定实例上检索,会返回AUGHTEIGHT。 @@TOTAL_ERRORS变量

这个变量用于记录从打开当前连接开始发生的总错误次数。和@@ERROR变量一样,它对每个用户会话是唯一的,并将在连接关闭时被重置。 @@TOTAL_READ变量

这个变量记录从打开当前连接时开始计算的磁盘读取总数。DBA使用这个变量查看磁盘读取活动的情况。 @@VERSION变量

这个变量包含当前SQL Server实例的完整版本信息。 SELECT @@VERSION

比如,对于运行在Windows 7上的SQL Server 2008开发版实例,以上脚本能够返回如下信息:

Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition on Windows NT 6.1 (Build 7600: )

实际的版本号是一个简单的整型值,它在微软公司内部使用。而发行的产品可能有其他的商标名。在本例中,SQL Server 2005的版本是9,SQL Server 2008的版本是10。Windows XP Professional显示为Windows NT 5.l版,而Vista显示为6.0版。构建号用于内部控制,反映beta版和预览版以及正式发行后的补丁包的变化。 错误函数

前面学习了如何使用@@ERROR全局变量来检索错误信息。而返回所有错误数据的更好方法是使用错误函数。这些函数返回的信息可以存储在错误跟踪表中,以供错误审核。错误函数嵌套在错误处理例程中。第11章将详细讨论错误处理,其实通过使用嵌套在TRY和END TRY语句中的代码块,后跟一个放在CATCH和END CATCH语句中的代码块就可以实现错误处理。

--Try to do something BEGIN TRY SELECT 5 / 0 END TRY --If it causes an error, do this BEGIN CATCH PRINT ERROR_MESSAGE() END CATCH 所谓的错误捕获,其实就是这个意思。如果运行上面的示例,将不会出现可识别的错误,因为错误将被捕获并在CATCH语句块中进行处理。在编写错误处理代码时,SQL程序员必须把这些代码放在会引发系统错误的catch代码块中。

下列几个错误函数用于返回错误的特定信息:

函数 ERROR_MESSAGE() ERROR_NUMBER() ERROR_SEVERITY() ERROR_STATE() 返回错误的描述。 返回错误号。 返回错误的严重级别。错误的严重级别是一个从0到25的整数。 返回错误的状态号。错误状态是一个整数,可以唯一地表示系统错误的原因。 ERROR_LINE() 返回例程中导致出错的行号。 说明 ERROR_PROCEDURE() 返回发生错误的存储过程名或触发器名。 下表简要描述了严重级别。 严 重 级 别 0~10 11~16 17 信息性消息。不会引发系统错误 用户可以更正的错误,例如违反了外键或主键规则 非致命的、不重要的资源错误 说 明