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

SQL2005 多表查询问题?
每个批次就新建一张表,一天可能生产N个批次,就要建N个表,
查询时,比如要查询从2012-5-31至2012-6-4,时间段的所有表的详细数据,用什么语句呢?主要是每天的表不确定个数

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


--1:找到所有天
select CONVERT(varchar(12),DATEADD(DAY,number,'2012-05-31'),112)
from master..spt_values 
where type='p' and number between 0 and 4
/*
------------
20120531
20120601
20120602
20120603
20120604

(5 row(s) affected)
*/


--2:找到所有表
/*这块自己写,下面是个例子*/
select name from sysobjects 
where xtype='u' 
    --截图表名称  和  天数匹配
and SUBSTRING(name,1,6) in 
(
    --把之前找到得天数拿过来...
    select CONVERT(varchar(12),DATEADD(DAY,number,'2012-05-31'),112)
    from master..spt_values 
    where type='p' and number between 0 and 4
)


--3: 根据找到的表 拼动态语句(下面的语句 要换成 第二块 找到的所有批次表)
declare @sql varchar(max)
select @sql=isnull(@sql,'') +' union all select * from '+CONVERT(varchar(12),DATEADD(DAY,number,'2012-05-31'),112)
from master..spt_values 
where type='p' and number between 0 and 4
set @sql=STUFF(@sql,1,11,'')
print @sql
--exec(@sql)
/*
--------------------------------
select * from 20120531 union all 
select * from 20120601 union all 
select * from 20120602 union all 
select * from 20120603 union all 
select * from 20120604
*/