你也注意到了,下面的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连接的服务器处理标识符:
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库SQL Server 2005范例代码查询辞典(8)在线全文阅读。
相关推荐: