zoukankan      html  css  js  c++  java
  • 水平分表查询(存储过程)

    转载:http://tuqiang9999.blog.163.com/blog/static/332413201036101137645/

    前提,数据库每天会新建一张表,由于数据量非常大,表的数据结构是一样的。

    下面这个存储过程是返回一条SQL语句的。

    我们传入的是两个时间,得到的是查询这段时间内的数据的一个SQL语句。

    Create Procedure Search

    @date1 datetime,  --起始时间

    @date2 datetime   --终止时间

    as

    declare @date1New datetime,

                 @rq  varchar(6),

                 @i  int , --记录循环次数

                 @s varchar(5000)  --根据表多少 可以扩大它

    set @rq = convert(varchar,@date1,12)--把时间格式化,比如2008-06-20变成080620

    --set @rq = select convert(varchar,@date1,12)是完全错误的,select的作用是显示,不是传值

    set @s = 'select * from MainTable' + @rq  --初始化@s='select * from MainTable080620' 这样第一个表就有了

    set @i = datediff(d,@date1,@date2)  --日期相减,按日计算

    while @i > 0

    begin

    --如果是非常重要的系统可以在这里加上该物理表是否存在的语句

    --以下是对于2000来讲,2008已经不存在于这个系统表里面了。其中IsUserTable是指表名。

    --sql2000

    --if   exist( select * from dbo.sysobjects where id = object_id(N'c')  and OBJECTPROPERTY(id,N'IsUserTable')=1)

    --sql2008

    --if exist( select * from dbo.sysobjects where name='IsUserTable')

    --begin

    --select '存在'

    --end

    --else

    --begin

    --select '不存在'

    --end

    set @date1New = dateadd(day,@i,@date1)

    set @rq=convert(varchar,@date1New,12)

    --如果是按月进行查询就修改上面,把d改成m

    set @s = @s + 'union all select * from MainTable' + @rq

    set @i = @i -1 --累加

    end

    select @s

    end

    例如:我们的表名叫作:MainTable+yymmdd,如MainTable100406,MainTable100407。。。

    那么当我们传入2010-04-06和2010-04-08,那么这个存储成功执行之后的结果会是:

    select * from MainTable100406

    union all

    select * from MainTable100407

    这个存储过程在对会大数据量的时候,大系统利用分表来处理数据量的时候非常有用。

  • 相关阅读:
    [Js-JDBC]事务
    [Js-JDBC]SQL注入及解决,Statement与PreparedStatement
    [Js-Java SE]IO+Properties配置文件
    [Js-Java SE]可变长参数
    [Js-Java SE]线程同步(加锁)(synchronized,守护进程,死锁,计时器)
    [Js-MySQL]函数
    [Js-MySQL]运算符优先级
    2015年3月30日
    Maven知识点一览
    记一次MySQL(5.7版本)数据库的主从同步和备份
  • 原文地址:https://www.cnblogs.com/zjwei55/p/2182073.html
Copyright © 2011-2022 走看看