游标是如何对结果集进行操作的?真正对数据操作的语句(如:update, delete ……)在看其它关于游标的帖子的时候,发现区别也就是在SQL 语句后多了个:CURRENT它与其它SQL 语句的本质区别是什么呢?望告知!!

解决方案 »

  1.   

    简单饿说,游标就是打开一个记录集,进行例遍处理以下是一段游标操作的例程,做了注解,你仔细看看
    --定义变量,用来 获取游标的值
    DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
       @message varchar(80), @title varchar(80)
    DECLARE authors_cursor CURSOR FOR 
    SELECT au_id, au_fname, au_lname
    FROM authors
    WHERE state = "UT"
    ORDER BY au_id   --定义游标OPEN authors_cursor --打开游标FETCH NEXT FROM authors_cursor 
    INTO @au_id, @au_fname, @au_lname -- 获取游标当前行的值WHILE @@FETCH_STATUS = 0  --例遍游标,获取每行的值
    BEGIN
       
       ...............   --利用游标的值进行数据处理      FETCH NEXT FROM authors_cursor  -- 进行下一行的 获取游标的值
       INTO @au_id, @au_fname, @au_lname
    ENDCLOSE authors_cursor --关闭游标
    DEALLOCATE authors_cursor  --释放游标
      

  2.   

    查个例子:
    CREATE TABLE #(id int,a int)
    INSERT #  SELECT 1,1
    UNION ALL SELECT 2,2
    UNION ALL SELECT 3,2--索引或者约束
    --ALTER TABLE # ADD UNIQUE(id)               --惟一键(约束),提供RID书签
    --CREATE INDEX IDX_a ON #(a)                  --a列上的普通索引,可以提供RID书签
    --CREATE CLUSTERED INDEX IDX_id_1 ON #(id)  --id列上的聚集索引,可以提供群集键书签
    --CREATE INDEX IDX_id_2 ON #(id)              --id列上的普通索引,游标的定义语句无法使用该索引提
                                                           供的RID书签
    --CREATE INDEX IDX_a_id ON #(a,id)           --a列和id列的上普通索引,可以提供RID书签--游标处理
    DECLARE tb CURSOR LOCAL
    FOR
    SELECT id FROM # ORDER BY a
    DECLARE @id int
    OPEN tb
    FETCH tb INTO @id
    WHILE @@FETCH_STATUS>=0
    BEGIN
    UPDATE # SET a=a-@id/2
    WHERE CURRENT OF tb --Current
    FETCH tb INTO @id
    END
    CLOSE tb
    DEALLOCATE tb
    SELECT * FROM #
    DROP TABLE #
      

  3.   

    估计楼主是想了解CURRENT OF 的用法以上。。
    CREATE INDEX IDX_id_2 ON #(id) 除这个索引外,其它都可以用。。
    看注释...
      

  4.   

    游标是一次操作一条记录,然后移动到下一条记录。
    SQL是集合操作,一次操作一组记录。SQL通常比游标快很多,要尽量使用SQL,
    实在不行才使用游标。