日期:2014-05-17  浏览次数:20486 次

如何动态的选择表
   最近想写一个小程序,程序是读取医院病人的费用,数据库的主要数据表是月份表,如201301,201302,201303……这样的格式,现在如果要读取一个科室的所有的病人的费用,我如何根据病人的入院日期和当前日期动态的计算病人数据所在的表,如何拼写动态的SQL语句

------解决方案--------------------

declare @starttime smalldatetime
declare @endtime smalldatetime
declare @sql varchar(max)
declare @m int,@c int
select @endtime='2013-01-02',@starttime='2013-04-08',@c=0,@sql=''

select @m=datediff(m,@endtime,@starttime)

if @m=0
begin
set @sql=@sql+ 'select * from ['+convert(varchar(6),@endtime,112)+']'
end
else 
begin
while (@c<=@m)
begin
if @c>0 
begin
set @sql=@sql+' union all '
end
set @sql=@sql+' select * from ['+convert(varchar(6),dateadd(m,@c,@starttime),112)+'] '
set @c=@c+1
end
end
exec(@sql)
--print @sql