SQL如何遍历所有表的一个字段来查询数据
如题。
就是说如果数据库每天产生一张表,比如Table_120201,Table_120202,Table_120203,Table_120204,Table_120205......
还有一个小区名cellname字段,这个字段存在于每一张表,就是说每一张表都有这个小区的记录。
现在举例要查询【一段时间内】小区名为‘Acell’的,从2012-02-01到2012-02-07的记录,怎么遍历这些表【从Table_120201--Table_120207】呢。
在线等,谢谢。
[解决办法]
将所有表联合建立视图,然后在视图里查找。
你这些表若是数据大可以用分区来提高速度,若是数据小可以按月、按年建表。
[解决办法]
表名称有规律,可以动态去拼接SQL的查询语句,具体需要查找什么。
[解决办法]
> 系统每天自动创建一张表。所以视图还不好建立,因为每天的表是即时产生的。
那系统不是也可以每天在建表之后更新你的视图吗?
[解决办法]
--根据查询的列创建一个临时表create table table_111201(id int)insert into table_111201 select 1gocreate table table_111202(id int)insert into table_111201 select 2gocreate table #temp(id int) -- 具体的字段declare @start datetimedeclare @end datetimedeclare @sql varchar(8000)set @start = '2011-12-01'set @end = '2011-12-02'select @sql = isnull(@sql+' union all ','')+'select * from table_'+datefrom( select right(convert(varchar(8),dateadd(dd,number,@start),112),6) date from master..spt_values where [type] = 'p' and number between 0 and datediff(dd,@start,@end))tinsert into #temp exec(@sql)select * from #temp--select 其他查询,根据#temp临时表drop table #temp,table_111201,table_111202/***************id-----------12(2 行受影响)
[解决办法]
declare @dt1 datetime,@dt2 datetimedeclare @cellname varchar(10)declare @sql nvarchar(max)--设置起止日期set @dt1='2012-02-01'set @dt2='2012-02-07'--设置小区名set @cellname='Acell'--形成动态查询语句select @sql=isnull(@sql+' union all ','') +'select * from Table_' +right(convert(varchar(8),dateadd(d,number,@dt1),112),6) +' where cellname='''+@cellname+''''from master..spt_valueswhere type='p' and dateadd(d,number,@dt1)<=@dt2--执行动态查询语句exec(@sql)/*如果将上面这句改成 select @sql,则你会得到这样的字串(复制网格中的内容):select * from Table_120201 where cellname='Acell' union all select * from Table_120202 where cellname='Acell' union all select * from Table_120203 where cellname='Acell' union all select * from Table_120204 where cellname='Acell' union all select * from Table_120205 where cellname='Acell' union all select * from Table_120206 where cellname='Acell' union all select * from Table_120207 where cellname='Acell'这就是你要的遍历各表的查询语句*/