我的数据库中有3万个表,每个表长度大约有两百万行,要对其中9千个结构相同的表进行相同的查询,这9千表都自增+1的ID,ID也是主键,这9千个表名每个最后两个字都是“09”,如:46546IND09、546IND09、456IND09。所有查询也只围绕ID进行查询。下面是表结构和我对一张表的查询:表名:46546IND09ID sin
1 132s
2 566g
3 456j
4 453j
5 454k查询语句只有一句,如下:
SELECT b.ID, b.sin, b.ID - a.ID + 1 AS newid
FROM dbo.46546IND09 AS a CROSS JOIN
dbo.46546IND09 AS b
WHERE (b.ID BETWEEN a.ID AND a.ID + 220) AND (a.ID % 110 = 1) AND ((b.ID - a.ID + 1) IN (33, 61, 128))
ORDER BY b.sin我查询方面知道的很少,只做过对一张表查询,我的问题是:如何对表名最后两个字相同,每个表的结构也相同的9千个表,进行快速查询,给出代码为好。我试过将几十张表一张一张追加到一张新表,再查询新表,查询结果是正确的。
1 132s
2 566g
3 456j
4 453j
5 454k查询语句只有一句,如下:
SELECT b.ID, b.sin, b.ID - a.ID + 1 AS newid
FROM dbo.46546IND09 AS a CROSS JOIN
dbo.46546IND09 AS b
WHERE (b.ID BETWEEN a.ID AND a.ID + 220) AND (a.ID % 110 = 1) AND ((b.ID - a.ID + 1) IN (33, 61, 128))
ORDER BY b.sin我查询方面知道的很少,只做过对一张表查询,我的问题是:如何对表名最后两个字相同,每个表的结构也相同的9千个表,进行快速查询,给出代码为好。我试过将几十张表一张一张追加到一张新表,再查询新表,查询结果是正确的。
--查表名,写动态sql,执行exec(@str)
select name from sysobjects where xtype='u'
表名:taname
ID ttname
1 46546IND09
2 546IND09
3 456IND09
4 4564INT09
5 3453INT09
…………
9012 353INT09
--首先生成连接你9000个表的语句
select 'select * from '+name+' union all ' from sys.objects
where type ='U' and substring(name,len(name)-1,2)='09'--然后把生成的语句放入视图,生成视图
create view all_table
as
(
--插入到这里
)--在视图里进行你的查询
select * from all_table