Following content copy from access911.net

相信各位都已经是Access老手了吧?如果有人问,更新记录有多少种方法,你肯定会说:方法多了,不过无非就是用指针一条一条更新和用sql语句一批一起更新而已。
虽然你熟悉了用ado.recordset的 movenext....方法来操作游标进行一条一条记录的更新,但是 sql server 中也有类似的功能你掌握了吗?
好了,让我们来介绍一下 sql server 中如何操作游标吧:

 游标的基本用法:
1.宣告游标:以 DECLARE 语法命名一个游标变量。依照需求,如游标所使用的数据若有别人同时会使用,游标所显示的数据是否要自动显示别人的变更,或是游标移动的方式等等来设定游标的型态。接着定义 SELECT 语法以设定游标的数据集合范围,通常会以 ORDER BY 子句设定数据排序的方式。SQL Server 的游标依照设定,可以提供前后移动以及可更新数据的游标型态。
2.开启游标:以 OPEN 语法开启
3.Fetch 在游标范围内的记录:当 Fetch 到某一笔记录时,光标记录就停在该笔记录上。你可以 Fetch 上一笔记录、下一笔记录、第一笔、最后一笔以及某特定的一笔等等。一般来说,FETCH 语法会在使用游标时一再被使用到。在 SQL Server 内,你可以在每一次 FETCH 动作后检查公共变量 @@FETCH_STATUS 的值来确定是否有找到符合的资料。说明如下表
值      
0    FETCH 成功
-1    没有数据,也就是游标移出了数据集合的范围,不管是移到第一笔之前和是最后一笔之后。
-2    该笔记录不再存在于游标的数据集合之内。有可能基础数据表上的记录在游标开启之后被其它人修改果,使得该记录不再符合开启游标时所定的条件。
4. 修改/删除游标所在位置的记录:这个动作是选择性的,语法如下
UPDATE/DELETE table WHERE CURRENT OF cursor_name
透过 WHERE CURRENT OF 的设定,你可以修改/删除光标所在位置的记录
5.关闭游标:使用 CLOSE 语法来关闭光标。关闭光标会结束光标的活动,但光标还是存在,所以你可以重新开启它而不必重新宣告。
6.释放掉游标:因为内部维护光标机制的数据结构会消耗掉内存,所以当你使用完光标时应该用 DEALLOCATE 语法释放掉光标。 

代码如下:

DECLARE @AuName VARCHAR(50) --宣告接受游标传回的值的变量
--宣告光标变量
DECLARE curAuName CURSOR FOR SELECT au_fname + ' ' + au_lname FROM authors ORDER BY au_id

OPEN curAuName --开启游标
FETCH NEXT FROM curAuName INTO @AuName --以一笔笔的方式存取集合内的记录,将找到的数据放入变量 @AuName之内
WHILE(@@FETCH_STATUS=0) --直到找不到数据才停止找寻下一笔的动作
BEGIN
    SELECT @AuName
    FETCH NEXT FROM curAuName INTO @AuName
END

CLOSE curAuName --关闭游标
DEALLOCATE curAuName --释放游标

最后再提醒的一点是:能够用 sql 语句一次性解决的更新千万不要用游标一条一条来解决!

posted on 2005-01-19 09:23  James Wong   阅读(1236)  评论(3编辑  收藏  举报