declare @sql char(50)
declare @tablename char(50)
set @tablename='kck'set @sql='select * from '+ @tablenameexec (@sql)

解决方案 »

  1.   

    --这要看你具体的数据处理需求--比如,你的表是每年一个,则一般表的命名规则是: tb_年份--查询的存储过程就可以写成类似这样的
    create proc p_qry
    @date_begin datetime,
    @date_end datetime
    as
    declare @s nvarchar(4000),@i int
    select @s='',@i=0
    while datediff(year,@date_begin,@date_end)>=@i
    select @s=@s+' union all select * from tb_'+datename(year,dateadd(year,@i,@date_begin))
    ,@i=@i+1
    set @s='select * from('
    +stuff(@s,1,11,'')
    +')a where 时间 between @date_begin and @date_end'
    exec sp_executesql @s
    ,N'@date_begin datetime,@date_end datetime'
    ,@date_begin,@date_end
    go
      

  2.   

    另一种方法你可以用视图create view v_qry
    as
    select * from tb_2003
    union all
    select * from tb_2004
    go--然后每年新加表的时候,修改视图,把新表加入视图中查询的时候直接从视图中查数据就行了.