SQL Server 2005范例代码查询辞典(8)

2019-04-22 23:56

你也注意到了,下面的SalesQuota值排名是9(而不是8)。RANK函数没有使用第8个位置是因为两行是并列第七,那么下一个排名值是9。如果3行并列,那么下一个排名值是10,依此类推:

在第二个示例中,RANK根据TerritoryID分区,对于TerritoryID的每一次修改RANK值都会从“1”开始。

8.7.3 根据无间隔排名返回行

在这个技巧中,我会演示SQL Server 2005新的DENSE_RANK,它几乎和RANK一样,只是DENSE_RANK不返回有间隔的排名值:

这个查询返回:

解析

它的语法和使用与RANK相同,只是DENSE_RANK不在排名值中创建间隔。在这个技巧的示例中,由于两个SalesQuota是280 000.00,所以两个排名都是第7:

在7之后的DENSE_RANK值为8。

8.7.4 使用NTILE

NTILE根据排序和可选的分区把结果集分成指定数量的分组。语法和其他排名函数相似,只是它包含一个integer_expression:

integer_expression用于指定要将结果划分成的分组数。本例演示对Sales.SalePersonQuotaHis- tory表操作的NTILE排名函数:

这个查询返回:

解析

在这个示例中,结果集被划分成4个分组。结果根据SalesQuota排序(降序),并且指定了NTILE分组分配的次序。注意到,前面的两组1和2都有3行,而分组3和4都有2行。如果行数不能被分组数整除,那么前几个分组会比后面几个分组多一些行。否则,如果行数能被分组数整除,每一个分组会有相同数量的行

8.8 使用系统函数检测服务器、数据库以及连接级别的配置

SQL Server 2005包含了一些用于检测SQL Server实例系统设置的系统配置函数。有一些函数带有@@前缀,在之前版本的SQL Server中叫做变量。另外一些系统函数没有@@前缀,并且接受用于帮助收集有关SQL Server实例或者数据库的参数。

下面几个技巧会演示这些系统函数。

8.8.1 使用SQL Server的每周第一天设置

@@DATEFIRST函数返回SQL Server实例每周指定的第一天。因为这个值定义了诸如DATEPART和DATEADD等其他日期函数使用的每周datepart的计算,所以这是需要关注的。在本例中,我会演示返回SQL Server实例当前每周第一天:

这个查询返回:

解析

@@DATEFIRST函数显示了每周第一天的设置。要修改这个第一天的值你可以使用SET DATEFIRST命令。例如:

修改值的时候,“7”是星期日,“1”是星期一,依此类推。它会影响DATEPART和DATEADD函数dw(星期几)代码的返回值。

8.8.2 查看当前会话使用的语言

@@LANGID系统函数返回一个表示当前用户会话本地语言标识符的smallint数据类型的值,@@LANGUAGE系统函数返回语言名。

本例返回当前查询会话中使用的本地语言设置:

这个查询返回:

解析

这个技巧演示了返回SQL Server实例的语言。根据用于创建SQL Server实例的区域设置和排序规则各不相同。

8.8.3 查看和设置当前连接锁超时设置

SET LOCK_TIMEOUT命令配置当前会话中语句等待其他连接释放锁的毫秒数。@@LOCK_TIMEOUT函数用于以毫秒为单位显示当前连接锁超时设置。

本例演示设置和查看当前会话的锁超时值:

1000毫秒,1秒

没有限制

这个查询返回:

解析

本技巧中的示例一开始把锁超时时间设置为1 000毫秒。要使用@@LOCK_TIMEOUT查看修改。之后,又把锁超时时间改为-1来表示无限等待。锁超时时间值告诉我们语句会等待锁定资源多长时间,如果超过了阈值时间,语句会自动取消然后返回一个错误消息。

8.8.4 显示当前存储过程上下文的嵌套级别

@@NESTLEVEL返回存储过程上下文当前的嵌套级别。存储过程嵌套级别代表存储过程调用另外一个存储过程的次数。SQL Server 2005允许存储过程组成最大32次嵌套(非完整)调用。

这个技巧演示如何捕获存储过程上下文的当前嵌套级别(参阅第10章):

第二个过程

第一个过程

在创建两个存储过程之后,在调用usp_Call_QuickAndDirty存储过程之前使用@@NESTLEVEL函数:

返回1和2嵌套级别

返回0嵌套级别

这个查询返回3个结果集:

解析

在这个技巧中,我创建了两个存储过程,第一个存储过程usp_QuickAndDirty执行了@@NESTLEVEL。第二个存储过程也调用了@@NESTLEVEL然后执行第一个存储过程。在调用过程之前,@@NESTLEVEL返回了0。每次执行嵌套后,@@NESTLEVEL值都增加了。

8.8.5 返回当前SQL Server实例名和SQL Server版本

@@SERVERNAME显示本地服务器名并且@@VERSION返回SQL Server实例的版本、日期和处理器信息。

本例返回当前SQL Server实例名和版本信息:

解析

在这个技巧中,我演示了返回当前SQL Server实例名和版本信息。和之前的系统配置函数一样,不需要任何参数。

8.8.6 返回当前连接的会话ID(SPID)

@@SPID返回当前连接的会话ID,你可以使用它来识别sp_who系统存储过程中的额外信息。

这个技巧返回当前SQL连接的服务器处理标识符:


SQL Server 2005范例代码查询辞典(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:廉租房龙感湖监理细则

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: