遇到了这样的问题
select * from tabledeclare @tablename nvarchar(50)
set @tablename='table1'
select * from @tablename提示错误用整个拼接就没问题
declare @sql nvarchar(100),@tablename nvarchar(50)
set @tablename='table1'
set @sql='select * from '+@tablename
exec (@sql)
exec (@sql) 要用在游标当中declare name  cursor for  exec (@sql)又提示是错误的select * from @tablename   这种实现格式要怎样才能实现?

解决方案 »

  1.   

    全局游标可以在 exec 中声明,在 exec 外使用declare @tabname varchar(256);
    declare @sql varchar(2000);
    set @tabname='dbo.customers';
    set @sql='declare c cursor global for select * from '+@tabname;
    exec(@sql);open c;fetch next from c;
    while @@fetch_status=0
    begin
     fetch next from c;
    endclose c;
    deallocate c;
      

  2.   

    exec是执行动态变量的,哪有放在中间的,成何体统
      

  3.   

    也可以通过游标变量declare @tabname nvarchar(256);
    declare @sql nvarchar(2000);
    set @tabname=N'dbo.Employees';
    set @sql=N'set @c=cursor for select * from '+@tabname+'; open @c;';declare @cur cursor;
    exec sp_executesql @sql,N'@c cursor output',@cur output;fetch next from @cur;
    while @@fetch_status=0
    begin
     fetch next from @cur;
    end
      

  4.   

    xman_78tom讲解的好详细!
    学习!
      

  5.   

    将所有要查询的表放临时表里,写个循环,用动态SQL查询。