日期:2014-05-18  浏览次数:20496 次

怎么动态的设置表名?
数据库结构是这样的,有很多个站点,使用编年表的形式存储数据。
每个站点每一年会有一张表。表字段有,站点名,值,时间。表名结构是:站点名_年份。每一个小时有一条数据产生。
我想查询每一个站点某一个月的平均值。需要从小时数据计算到日均数据,再从日均数据计算出月均数据。

但由于年份是动态的,所以表名也是动态的。如何在循环中,动态设置表名?我使用存储过程能设置带变量的表名,不能用循环。用循环又不能设置带变量的表名。如何解决?




------解决方案--------------------
SQL code

@Year int --年份, @beginDate datetime--开始时间 ,@endDate datetime--结束时间,
@Station decimal(18, 3)--站点的值

begin
  set @endDate=cast(DATEADD(MM,1,@beginDate ) as datetime) --结束时间是开始时间加一个月
  while @beginDate<@endDate
  begin
 -- select @Station= ( select monthAvg from 站点名_@Year )
  exec('insert into 另外一个表 select beginDate='
  +@beginDate+',monthAvg from 站点名_'+cast(@Year as varchar))--把时间和月均值插入另一个表
  set @beginDate = cast(DATEADD(dd,1,@beginDate ) as datetime) --加一天
  end
end

try