我的数据库中有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.   

     
    --查表名,写动态sql,执行exec(@str)
    select name from sysobjects where xtype='u'
      

  2.   

    补充一下,我数据库中有一张表保存有这9千个表的名称,这张表的名称和结构如下:
    表名:taname
    ID ttname
    1 46546IND09
    2 546IND09
    3 456IND09
    4 4564INT09
    5 3453INT09
    …………
    9012 353INT09
      

  3.   


    --首先生成连接你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
      

  4.   

    记得把生成的最后一句里的union all去掉,再生成视图