游标定义时,使用动态sql生成游标数据源的方法分享


摘要 :
下文分享在游标定义时,通过动态sql生成游标数据源的方法分享
实验环境:sql server 2008 r2


   ---动态sql定义方法:
   declare @sql varchar(max)
   set @sql ='select name from  tableName '
  ---方法1: 会产生相应的错误信息,游标无法运行,错误的游标动态sql定义方法
   declare @tmp varchar(max) 
   declare [游标名] cursor for exec @sql
     open [游标名]
      fetch [游标名] into @tmp
      select @tmp ---输入变量信息
   close [游标名]
   deallocate [游标名]

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

  ---方法2: 正确的游标动态sql定义方法
    declare @tmp varchar(max) 
    exec('declare [游标名] cursor for exec ' +@sql)

     open [游标名]
     fetch [游标名] into @tmp
       select @tmp ---输入变量信息
     close [游标名]
     deallocate [游标名]


1.通过方法1和方法2的运行区别,我们可以看出,游标定义时,“单独将后面的@sql定义解析”,并不会做为sql命令去单独运行,
所以在动态sql定义数据源时,我们需将动态sql采用exec执行,才能定义游标;
2.通过方法的定义,我们可以看出游标的定义,在整个代码段中,都有效,游标一旦定义,会缓存至内存中,直到close和释放;