• 游标


    还是看下上篇的那段代码:

    create proc pro_abc
    as
    declare @p1 nvarchar(50),@p2 int;
    declare my_cursor cursor scroll dynamic
    for SELECT F_CR_JSGM,f_nb_xmbm FROM B_JIHUA_XIANGMU WHERE NOT  F_CR_JSGM IS NULL
        open my_cursor
        fetch next from my_cursor into @p1,@p2
        while(@@fetch_status=0)
          begin
            update b_jihua_jsgm set f_cr_jsgm2=@p1 where f_nb_xmbm=@p2
            fetch next from my_cursor into @p1,@p2
          end
        close my_cursor
        deallocate my_cursor
    
    分解:这段是存储过程
    create proc pro_abc--
    as
    declare @p1 nvarchar(50),@p2 int;
          begin
           select 'aaaa'
          end
     
    

    加上游标就是这样了

    create proc pro_abc
    as
    declare @p1 nvarchar(50),@p2 int;--声明变量和类型
    --声明游标的名称my_cursor;这个游标所用到的SQL语句
    ----scroll表示可随意移动游标指        针(否则只能向前),dynamic表示可以读写游标(否则游标只读)*/
    declare my_cursor cursor scroll dynamic
    for SELECT F_CR_JSGM,f_nb_xmbm FROM B_JIHUA_XIANGMU WHERE NOT  F_CR_JSGM IS NULL
    --打开游标
        open my_cursor
    --必须用FETCH语句来取得数据 可以传递参数
        fetch next from my_cursor into @p1,@p2
    --fetch_status=0一切正常
        while(@@fetch_status=0)
          begin
            update b_jihua_jsgm set f_cr_jsgm2=@p1 where f_nb_xmbm=@p2
            fetch next from my_cursor into @p1,@p2
          end
    --关闭游标
        close my_cursor
    --删除游标资源
        deallocate my_cursor
    

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    声明游标 
    象使用其它类型的变量一样,使用一个游标之前,首先应当声明它。游标的声明包括两个部分:游标的名称;这个游标所用到的SQL语句

    在游标的声明中有一点值得注意的是,如同其它变量的声明一样,声明游标的这一段代码行是不执行的,您不能将debug时的断点设在这一代码行上,也不能用IF...END IF语句来声明两个同名的游标,如下列的代码就是错误的。 
    IF Is_prov="北京"THEN 
    DECLARE CustomerCursor CURSOR FOR 
    SELECT acct_no,name,balance 
    FROM customer 
    WHERE province="北京"; 
    ELSE 
    DECLARE CustomerCursor CURSOR FOR 
    SELECT acct_no,name,balance 
    FROM customer 
    WHERE province〈〉"北京"; 
    END IF 

    ----------------------------------

    由于打开游标是对数据库进行一些SQL SELECT的操作,它将耗费一段时间,主要取决于您使用的系统性能和这条语句的复杂程度。如果执行的时间较长,可以考虑将屏幕上显示的鼠标改为hourglass(这句不会)

    -------------------------------------

    提取数据 
    当用OPEN语句打开了游标并在数据库中执行了查询后,您不能立即利用在查询结果集中的数据。您必须用FETCH语句来取得数据。一条FETCH语句一次可以将一条记录放入程序员指定的变量中。事实上,FETCH语句是游标使用的核心。在DataWindow和DataStore中,执行了Retrieve()函数以后,查询的所有结果全部可以得到;而使用游标,我们只能逐条记录地得到查询结果。 
    已经声明并打开一个游标后,我们就可以将数据放入任意的变量中。在FETCH语句中您可以指定游标的名称和目标变量的名称

    从语法上讲,上面所述的就是一条合法的取数据的语句,但是一般我们使用游标却还应当包括其它的部分。正如我们前面所谈到的,游标只能一次从后台数据库中取一条记录,而在多数情况下,我们所想要作的是在数据库中从第一条记录开始提取,一直到结束。所以我们一般要将游标提取数据的语句放在一个循环体内,直至将结果集中的全部数据提取后,跳出循环圈。通过检测SQLCA.SQL-CODE的值,可以得知最后一条FETCH语句是否成功。一般,当SQLCODE值为0时表明一切正常,100表示已经取到了结果集的末尾,而其它值均表明操作出了问题,

    更多的就是这里了http://www.knowsky.com/344071.html

    今天就学到这里 再见

  • 相关阅读:
    Throwable
    Format
    Serializable
    IfcAbsorbedDoseMeasure
    Iterable
    IfcAmountOfSubstanceMeasure
    Queue
    IfcCurveOnSurface
    unity3d修改对象属性
    Deque
  • 原文地址:https://www.cnblogs.com/0banana0/p/2065243.html
Copyright © 2020-2023  润新知