问题是这样的:
我现在有多个表,表名为:log_2008_11,log_2008_12,log_2009_01,log_2009_02等等,即表名构成为log+年份+月份
现在需要建立一个存储过程,查询日期范围内的所有数据。传入两个参数,为日期参数,类型为int,
CREATE PRODURCE GET_LOG_INFO
@beginDate int,
@endDate int
as        
begin------end如何才能实现这个功能???
EXEC GET_LOG_INFO 20081101,20090201 查询08年11月到09年02月的数据,这些数据分布在不同的表中。但都是动态的。

解决方案 »

  1.   

    使用动态语句!,先取你查询的年份、期间;然后在把几个表用UNION合并
      

  2.   

    估計是沒分,都不願意回覆,呵呵
    ding
      

  3.   

    CREATE PROCEDURE GET_LOG_INFO 
    @beginDate datetime, 
    @endDate datetime 
    as        
    begin 
      declare @sql varchar(8000),@i int
      select @sql='',@i=datediff(mm,@beginDate,@endDate)+1
      
      while @i>0
      begin
        select
            @i=@i-1, 
            @sql=' union all select * from Log_'+rtrim(datepart(YY,t.Dates))+'_'
                 +right('0'+rtrim(datepart(MM,t.Dates)),2)+@sql 
        from 
            (select dateadd(mm,@i,@beginDate) as Dates) t
      end
      
      set @sql='select * from ('+stuff(@sql,1,11,'')+') t'
      
      exec(@sql)
    end 
    goEXEC GET_LOG_INFO '20081101','20090201'
    godrop procedure GET_LOG_INFO
    go