create proc Sp_MyProc
@FieldShow varchar(200),
@Table varchar(50)
as
    declare @Sql varchar(2000)
    set @sql='select '+@FieldShow +' from '+@Table
    declare aa cursor for @Sql
     open aa
     ....
     ....我的问题就是用游标的时候是不是不能用@Sql参数
如果可以用告诉我要怎么用

解决方案 »

  1.   

    create proc Sp_MyProc
    @FieldShow varchar(200),
    @Table varchar(50)
    as
      exec ('declare aa cursor for select '+@FieldShow +' from '+@Table)
      open aa
      ....
      ....
      

  2.   

    会报错呀...
    消息 443,级别 16,状态 14,过程 T_SeachTree,第 8 行
    在函数内的 'EXECUTE STRING' 中对带副作用的或依赖于时间的运算符的使用无效。
      

  3.   

    不好意思...写错了...
    我这个是放到函数里的..不是放到过程中的...
    drop function T_SeachTree
    create function T_SeachTree(@Table varchar(50),@FieldShow varchar(100),@RepStr varchar(10))
    returns @tb table(TreeID varchar(1000),TreeName varchar(2000),TreeLvevl varchar(1000))
    as
    begin 
        declare @Sql varchar(2000)
        set @sql='select '+@FieldShow +' from '+@Table
        declare aa cursor for @sql
        open 
        ....
        ....
    return
    end 
      

  4.   


    函数?不能EXEC!
    但是不是 create proc Sp_MyProc 吗?
      

  5.   

    函数不支持EXEC动态SQL的,换别的方法。
      

  6.   

    LZ你这么做没意义吧。
    动态列,动态表。
    但 fetch next into @val1,@val2
    这里的@val1,@val2可是需要先declare 
    你没定义,怎么可以获取呢?请换 用另一种思路。
      

  7.   

    create function T_SeachTree(@Table varchar(50),@FieldShow varchar(100),@RepStr varchar(10))
    returns @tb table(TreeID varchar(1000),TreeName varchar(2000),TreeLvevl varchar(1000))
    as
    begin 
      declare aa cursor for select DeptID,DeptName,DeptLevel from Sys_Departments
      open aa
         fetch next from aa into @tb
         ...
         ...
      close aa
      deallocate aa
    return
    end 
    这里怎么不能用@tb 有没有什么方法