declare @strSql nvarchar(500)
set @strSql=N'select * from oUser'  --此处语句是动态生成的declare cur cursor for
exec sp_executesql @strSql    --此处我这样写,会出错,请问如何把定义游标来执行@strSql
...
...
close cur
deallocate cur

解决方案 »

  1.   

    declare @strSql varchar(8000)
    set @strSql='declare cur cursor for select * from oUser
    open cur
    ...
    ...
    close cur
    deallocate cur
    'exec (@sql)
      

  2.   

    这样更符合lz要求
    declare @strSql varchar(500)
    set @strSql='declare cur cursor for select * from ta'  --此处语句是动态生成的exec (@strSql)
    open cur...
    ...
    close cur
    deallocate cur
      

  3.   

    declare @strSql varchar(1000)
    set @strSql = 'declare cur cursor for select * from oUser'
    exec(@strSql)
    open cur
    ...
    ...
    close cur
    deallocate cur
      

  4.   

    谢谢楼上各位的解答,动态语句中创建游标可以执行,但是得不到结果declare @strSql varchar(500)
    set @strSql='declare cur cursor for select * from oUser'  --此处语句是动态生成的exec (@strSql)
    open cur
    while @@fetch_status<>-1
       begin
         print 'ok'
         fetch next from cur
       end
    else
       begin
         print 'err'
       end
    close cur
    deallocate cur打出来的结果是err,单独执行select * from oUser是有记录的
      

  5.   

    写错了declare @strSql varchar(500)
    set @strSql='declare cur cursor for select * from oUser'  --此处语句是动态生成的exec (@strSql)
    open cur
    fetch next from cur                             --加这句
    while @@fetch_status<>-1
       begin
         print 'ok'
         fetch next from cur
       end
    else
       begin
         print 'err'
       end
    close cur
    deallocate cur
      

  6.   

    --晕,while可以这么写?declare @strSql varchar(500)
    set @strSql='declare cur cursor for select * from oUser'  --此处语句是动态生成的exec (@strSql)
    open cur
    fetch next from cur                             --加这句
    if @@fetch_status=0                            --@@fetch_status用0判断
    while @@fetch_status<>0                         
       begin
         print 'ok'
         fetch next from cur
       end
    else
       begin
         print 'err'
       end
    close cur
    deallocate cur