4.4 在游标中导航:FETCH语句
我猜第一个创建SQL游标语法的人肯定非常喜欢狗。他们大概决定要把寻找的数据想成是骨头,而SQL Server是忠实的猎犬。我猜,从这里开始,就有了FETCH关键字。
思考一下就会觉得,这是很贴切的术语。简单地说,它告诉SQL Server“去取过来!”收到这一指令后,忠实的狗(以SQL Server的形式)就会去找到我们要取得的特定的骨头(行)。在本章前面的一些游标中,已经对FETCH语句有了一点接触,不过,现在要更深入地探究这一非常重要的语句。
实际上,比起我们已经看过的来说,FETCH具有更多的选项。迄今为止,见过三种不同的FETCH选项(NEXT、PRIOR和FIRST)。这真算是一个不错的开始。的确,对于最基本的游标导航命令组来说,其实只需再加入一个命令即可,并且,在那之后,再加入几个命令就拥有了完整的命令集。
接下来,看一下每一个游标导航命令,并看看它们能为我们做什么:
|
FETCH选项 |
描 述 |
|
NEXT |
在结果集中恰好向前移动一行,该选项是主要的游标选项。百分之九十或者更多的游标不再需要比该选项更多的东西。在决定是否声明为FORWARD_ONLY时请记住这些。当试图进行FETCH NEXT,并且这导致超出了最后一条记录时,@@FETCH_STATUS将会为-1 |
|
PRIOR |
正如你可能已经猜到的,该选项的功能与NEXT相反。该选项紧邻当前行向前移动一行。当位于结果集中的第一行时,执行FETCH PRIOR将得到为-1的@@FETCH_STATUS,就好像在FETCH NEXT时移动到了文件末尾之外一样 |
|
FIRST |
与大多数游标选项一样,该选项很清楚地表明了它的作用。如果执行FETCH FIRST,则将处于记录集中的第一行。该选项唯一使@@FETCH_STATUS为-1的时候是,在结果集为空的时候 |
(续)
|
FETCH选项 |
描 述 |
|
LAST |
该选项与FIRST的功能相反,FETCH LAST将使你移动到结果集中的最后一行。同样,唯一使@@ FETCH_STATUS为-1的时候是,当结果集为空的时候 |
|
ABSOLUTE |
使用该选项时,你要提供一个整数值,该值表明想要返回从游标头开始的第多少行。如果提供的值为负,则表明想要返回从游标末尾开始的第多少行。注意,动态游标不支持该选项(由于动态游标中的成员在每次提取时重新生成,你能够“真正知道你在哪里”)。在一些客户访问对象模型中,这大致等同于导航到某个特定的“绝对位置” |
|
RELATIVE |
不,这可不是岳母亲戚关系这样的事情。这是关于从当前行开始向前或向后移动指定数目的行的导航问题 |
在前面的游标中,我们已经对这些选项进行了相当多的讨论。其他的导航选择的工作起来几乎一样。