如何根据不同的参数值访问不同的表?
如:输入参数@FileType = 'Daily';用表Table_Daily_***;
    参数@FileType = 'Monthly':用表Table_Monthly_***;
    参数@FileType = 'Yearly':用表Table_Yearly_***;在一个存储过程中,有很多表要:
CREATE procedure spPopulate_DataLink  @FileType varchar(100) 
ASselect * into #CodeMap from 根据@FileType不同取不同的表
......处理#CodeMa语句...
insert into CodeMap select * from #CodeMap 
drop table #CodeMap select * into #DataItemUnits from 根据@FileType不同取不同的表
......处理#DataItemUnits语句...
insert into DataItemUnits select * from #DataItemUnits
drop table #DataItemUnits
................
...............
以下还有几十张这样的表要插入语句
--------------------
请问有啥方法解决:
select * into #CodeMap from 根据@FileType不同取不同的表
----比如传入@FileType='Daily'时候用Table_Daily_***:
select * into #CodeMap from Table_Daily_***
----如果传入@FileType='Yearly'时候用Table_Yearly_***:
select * into #CodeMap from Table_Yearly_***.....
以下还有几十张这样的表要这样判断

解决方案 »

  1.   

    没办法,只能用拼SQL.如:
    declare @sql NVARCHAR(MAX), @FileType NVARCHAR(255)
    SET @sql = 'select * from '
    IF(@FileType = 'Daily')
    SET @sql = @sql + 'Table_Daily'
    ELSE IF(@FileType = 'Yearly')
    SET @sql = @sql + 'Table_Yearly'EXEC(@sql)
    期待楼下的大神有新方法
      

  2.   

    if @FileType= 'Daily'
      select * from Table_Daily_***
    if @FileTyp ='Monthly'
      select * from Table_Monthly_***
    if @FileType = 'Yearly'
      select * from Table_Yearly_***
      

  3.   

    declare @sql varchar(1000)
    set @sql='select * from '
    if @FileType= 'Daily'
      set @sql=@sql+'Table_Daily_***'
    else if @FileTyp ='Monthly'
      set @sql=@sql+'Table_Monthly_***'
    else if @FileType = 'Yearly'
      set @sql=@sql+'Table_Yearly_***'
    exec(@sql)
      

  4.   

    把字符串和表名的对应关系,放到一张表或表变量中。动态读取即可。
    总之,要变表名,只能拼SQL,就写不成静态SQL了。
      

  5.   

    见 http://blog.csdn.net/sarahcla/article/details/9242727
      

  6.   


    declare @sql NVARCHAR(MAX) 
    declare @FileType varchar(10) 
    set @FileType = 'Daily' SET @sql = 'select * into #AnnouncementsRepType from '
    IF @FileType = 'Monthly'   
    SET @sql = @sql + 'vw_AnnouncementsRepType_Monthly' 
    ELSE IF(@FileType = 'Daily')
    SET @sql = @sql + 'vw_AnnouncementsRepType'     print @sql 
    exec sp_executesql @sql  select * from #AnnouncementsRepType这个临时表无效--Invalid object name '#AnnouncementsRepType'.
    难道一定要用全局表吗? ##AnnouncementsRepType
      

  7.   

    --3选1吧,没什么好方法(注意临时表的作用域)--可行 
    CREATE TABLE #temp1(id int)
    EXEC('insert #temp1 values(1)')
    SELECT * from #temp1--可行
    EXEC('CREATE TABLE #temp1(id int) insert #temp1 values(1) SELECT * from #temp1')--可行
    IF object_id('tempdb..##temp', 'u') IS NOT NULL
    DROP TABLE ##temp
    EXEC('select * into ##temp from dbo.test')
    SELECT * from ##temp