游标

    技术2022-05-18  14

        SQL语句提供了对记录集合的各种操作,但若需要进行一些针对记录集中的单个记录进行判断,然后再执行的操作,有时就不能实现,而使用游标可以解决这一1问题:

       1:游标的创建和使用      游标的创建分为5个步骤:     (1)定义游标:( 查下语法规则)        ex:      declare  T_log_cursor  CURSORFOR  SELECT  ID,F_logText,F_logType,datee  from   dbo.T_log  where F_logType='3' order by  datee      (2)  打开游标:          --2打开游标,实际上执行定义游标内的select语句,形成游标记录集填充游标,并把游标的指针定位在第一条记录前open T_log_cursor  declare  @cur_rowcount  intselect   @cur_rowcount=@@CURSOR_ROWSprint @cur_rowcount      (3)读取游标     --读取游标(fetch  cursor)declare  @id intdeclare  @F_logType nvarchar(50)declare  @F_logText  nvarchar(50)declare  @datee  Datetimefetch  next  from  T_log_cursor into  @id,@F_logText,@F_logType,@datee  --将记录各字段内容保存到对应的变量中while  @@FETCH_STATUS=0begin     print  (str(@id)+''+@F_logText+''+@F_logType+''+Convert(nvarchar,@datee))   fetch  next  from  T_log_cursor into  @id,@F_logText,@F_logType,@dateeend

    (4) 关闭游标    close T_log_cursor (5) 释放游标    deallocate  T_log_cursor               一个连贯的句子就是:    select  *  from  dbo.T_log--1定义游标declare  T_log_cursor  CURSORFOR  SELECT  ID,F_logText,F_logType,datee  from   dbo.T_log  where F_logType='3' order by  datee

    --2打开游标,实际上执行定义游标内的select语句,形成游标记录集填充游标,并把游标的指针定位在第一条记录前open T_log_cursor  --3读取游标(fetch  cursor)declare  @id intdeclare  @F_logType nvarchar(50)declare  @F_logText  nvarchar(50)declare  @datee  Datetimefetch  next  from  T_log_cursor into  @id,@F_logText,@F_logType,@datee  --将记录各字段内容保存到对应的变量中while  @@FETCH_STATUS=0begin     print  (str(@id)+''+@F_logText+''+@F_logType+''+Convert(nvarchar,@datee))   fetch  next  from  T_log_cursor into  @id,@F_logText,@F_logType,@dateeend

    --4关闭游标    close T_log_cursor --5释放游标    deallocate  T_log_cursor   

    3:游标使用中应注意的问题:   (1)  全局变量:           全局变量@@fetch_status 用来存储fetch语句执行状态的信息,可使用查询语句           select  @@fetch_status  来完成上述查询任务。            全局变量@@rowcount记载到最近一次fetch操作为止,从游标记录集中共返回的行数,同样,可          使用查询语句select @@rowcount 来进行查看:

         游标的使用会在几个方面影响系统的性能:    导致页锁和表锁的增加;    导致网络通信量的增加    服务器处理相应指令的额外开销:    因此尽管游标控制比较灵活,但会损失速度,这就存在一个游标使用的优化:

     


    最新回复(0)