是这样,有些车辆动态数据,保存在31张表里面
比如今天的数据就保存在Data15这张表里面(今天15号)
有需求,查一段时间内的数据,比如说 2009年5月25号11点12分13秒-现在时间的,
求思路,我该如何想如何写sql语句呢?

解决方案 »

  1.   


    declare @n int;
    set @n=1
    declare @s varchar(2000)
    set @s=''
    while @n<=31
    begin
    set @s=@s+ 'union  select * from Date'+@n 
    set @n=@n+1
    end
    select @s=stuff(@s,1,5,'') ----取掉第一個union
    exec(@s)
      

  2.   

    对于sql语句来说,我还是比较菜的,这是个存储过程吗?呵呵,原来可以写循环语句啊。
      

  3.   

    可以考虑分区视图:
    SQL Server 分区视图允许各机构调节各自系统以处理大量数据。这种功能使您能够在多个表之间对数据进行分区;
    在逻辑上通过视图把各个表联合起来,使分区尽可能对用户与开发人员透明。
      

  4.   

    SQL Server 2000 实现可更新分区视图
      

  5.   

    修改一下 declare @n int;
    set @n=1
    declare @s varchar(2000)
    set @s=''
    while @n<=31
    begin
    set @s=@s+ '  union  select * from Date'+@n    -----此處增加空格.
    set @n=@n+1
    end
    select @s=stuff(@s,1,5,'') ----取掉第一個union
    exec(@s)
      

  6.   

    就是
    ks_reny的方法。
    但是要稍微修改下。
    要筛选出复合条件的表。不能所有的表都SELECT  declare @n int,@Beginvar int,@EndVar int   
    select @Beginvar = day('2009-05-25'),@EndVar = day(getdate())select @n = @BeginVar  declare @s varchar(2000)
    set @s=''
    while @n<= @endVar
    begin
    set @s=@s+ '  union  select * from Date'+ @n    -----此處增加空格.
    set @n=@n+1
    end 
    select @s=stuff(@s,1,5,'') ----取掉第一個union
    exec(@s)
    需要说明的是,上面代码不支持跨月查询,如果跨月的话,还要修改下。