create table tb6(类号 varchar(10) , 表名 varchar(10)) 
insert into tb6 values('CB' , 'tb4') 
insert into tb6 values('CC' , 'tb5') 
go
create table tb5( 数据A int , 数据B int) 
insert into tb5 values(13 , 11 ) 
insert into tb5 values(24 , 12 ) 
insert into tb5 values(36 , 13 ) 
insert into tb5 values(47 , 213) 
insert into tb5 values(48 , 123) 
go
create table tb4( 数据 int) 
insert into tb4 values( 53 )
insert into tb4 values(99 )
insert into tb4 values(454 )
insert into tb4 values( 434) 
insert into tb4 values(99 )
insert into tb4 values(994 )
希望效果:
CC
数据A         数据B
----------- -----------
13          11
24          12
36          13
47          213
48          123谢谢回帖!

解决方案 »

  1.   

    set nocount on 
    if object_id('tb6')is not null drop table tb6
    go
    create table tb6(类号 varchar(10) , 表名 varchar(10)) 
    insert into tb6 values('CB' , 'tb4') 
    insert into tb6 values('CC' , 'tb5') 
    go
    if object_id('tb5')is not null drop table tb5
    go
    create table tb5( 数据A int , 数据B int) 
    insert into tb5 values(13 , 11 ) 
    insert into tb5 values(24 , 12 ) 
    insert into tb5 values(36 , 13 ) 
    insert into tb5 values(47 , 213) 
    insert into tb5 values(48 , 123) 
    go
    if object_id('tb4')is not null drop table tb4
    go
    create table tb4( 数据 int) 
    insert into tb4 values( 53 )
    insert into tb4 values(99 )
    insert into tb4 values(454 )
    insert into tb4 values( 434) 
    insert into tb4 values(99 )
    insert into tb4 values(994 )
    declare @s varchar(1000)
    select @s=isnull(@s,'')+'select * from ' +  表名 from tb6 where 类号='CC'
    exec (@s)
    /*数据A         数据B         
    ----------- ----------- 
    13          11
    24          12
    36          13
    47          213
    48          123*/
      

  2.   

    动态sql语句基本语法 
    1 :普通SQL语句可以用Exec执行 eg:   Select * from tableName 
             Exec('select * from tableName') 
             Exec sp_executesql N'select * from tableName'    -- 请注意字符串前一定要加N 2:字段名,表名,数据库名之类作为变量时,必须用动态SQL eg:   
    declare @fname varchar(20) 
    set @fname = 'FiledName' 
    Select @fname from tableName              -- 错误,不会提示错误,但结果为固定值FiledName,并非所要。 
    Exec('select ' + @fname + ' from tableName')     -- 请注意 加号前后的 单引号的边上加空格 当然将字符串改成变量的形式也可 
    declare @fname varchar(20) 
    set @fname = 'FiledName' --设置字段名 declare @s varchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功 
    exec sp_executesql @s   -- 此句会报错 declare @s Nvarchar(1000)  -- 注意此处改为nvarchar(1000) 
    set @s = 'select ' + @fname + ' from tableName' 
    Exec(@s)                -- 成功     
    exec sp_executesql @s   -- 此句正确 3. 输出参数 
    declare @num int, 
            @sqls nvarchar(4000) 
    set @sqls='select count(*) from tableName' 
    exec(@sqls) 
    --如何将exec执行结果放入变量中? declare @num int, 
                   @sqls nvarchar(4000) 
    set @sqls='select @a=count(*) from tableName ' 
    exec sp_executesql @sqls,N'@a int output',@num output 
    select @num 
      

  3.   

    DECLARE @classname varchar(10)
    DECLARE @tb_name varchar(10)SET @classname='CC'EXEC sp_executesql N'SELECT @tb_name=表名 FROM tb6 WHERE 类号=@classname',
                       N'@classname varchar(10),@tb_name varchar(10) output',
                       @classname,@tb_name outputEXEC('SELECT * FROM ['+@tb_name+']');
      

  4.   


    declare @sql varchar(1000)
    select @sql = ''select @sql = 'select * from ' + 表名
    from tb6
    where 类号 = 'CC'exec (@sql)
      

  5.   

    create table tb6(类号 varchar(10) , 表名 varchar(10)) 
    insert into tb6 values('CB' , 'tb4') 
    insert into tb6 values('CC' , 'tb5') 
    go
    create table tb5( 数据A int , 数据B int) 
    insert into tb5 values(13 , 11 ) 
    insert into tb5 values(24 , 12 ) 
    insert into tb5 values(36 , 13 ) 
    insert into tb5 values(47 , 213) 
    insert into tb5 values(48 , 123) declare @tb varchar(50)
    select @tb = 表名 from tb6
    where 表名= 'tb5'
    print 'select * from ' + @tb
    exec('select * from ' + @tb )结果:13 11
    24 12
    36 13
    47 213
    48 123
      

  6.   

    create table tb6(类号 varchar(10) , 表名 varchar(10)) 
    insert into tb6 values('CB' , 'tb4') 
    insert into tb6 values('CC' , 'tb5') 
    go
    create table tb5( 数据A int , 数据B int) 
    insert into tb5 values(13 , 11 ) 
    insert into tb5 values(24 , 12 ) 
    insert into tb5 values(36 , 13 ) 
    insert into tb5 values(47 , 213) 
    insert into tb5 values(48 , 123) 
    go
    create table tb4( 数据 int) 
    insert into tb4 values( 53 )
    insert into tb4 values(99 )
    insert into tb4 values(454 )
    insert into tb4 values( 434) 
    insert into tb4 values(99 )
    insert into tb4 values(994 )declare @sql varchar(8000)
    select @sql='select * from ' + 表名 
    from TB6 
    where 类号='CC'exec(@sql)drop table tb6
    drop table tb5
    drop table tb4
    /*
    数据A         数据B         
    ----------- ----------- 
    13          11
    24          12
    36          13
    47          213
    48          123
    */
      

  7.   

    create table tb6(类号 varchar(10) , 表名 varchar(10)) 
    insert into tb6 values('CB' , 'tb4') 
    insert into tb6 values('CC' , 'tb5') 
    go
    create table tb5( 数据A int , 数据B int) 
    insert into tb5 values(13 , 11 ) 
    insert into tb5 values(24 , 12 ) 
    insert into tb5 values(36 , 13 ) 
    insert into tb5 values(47 , 213) 
    insert into tb5 values(48 , 123) 
    go
    create table tb4( 数据 int) 
    insert into tb4 values( 53 )
    insert into tb4 values(99 )
    insert into tb4 values(454 )
    insert into tb4 values( 434) 
    insert into tb4 values(99 )
    insert into tb4 values(994 )declare @ser varchar(10)
    declare @table varchar(10)
    set @ser='cc'
    set @table =(select 表名 from tb6 where 类号=@ser)exec('select * from '+@table)
    drop table tb6,tb5,tb4
      

  8.   


    declare @sql nvarchar(100)
    set @sql='select * from'select @sql=@sql+ ' '+表名 from tb6 where 类号='cc'
    exec (@sql)
    13 11
    24 12
    36 13
    47 213
    48 123
      

  9.   


    declare @sql varchar(20)
    set @sql=''
    select @sql='select * from '+表名 from tb6 where 类号='CC'
    print @sql
    exec(@sql)