前提,数据库每天会新建一张表,由于数据量非常大,表的数据结构是一样的。
下面这个存储过程是返回一条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
这个存储过程在对会大数据量的时候,大系统利用分表来处理数据量的时候非常有用。
分享到:
相关推荐
资源里包含SQL文档:创建数据库和存储过程.sql 生成数据.sql 测试.sql 比较完善的大量数据分表功能代码,包含...数据按照每个月创建一个数据表,通过存储过程输入参数,按照指定日期跨表查询数据,并且可以分页查询。
1、修改表名 2、创建新表 3、按时间条件插入数据 由于数据太大、用的改表名的方式备份分表,通过传入表名和条件字段名备份相应的表
一个简单的oracle数据库环境下的存储过程,介绍了如何从带年月人的分表取数据
MySQL动态创建表,数据分表的存储过程,需要的朋友可以参考下。
杰奇小说系统分站分表手机版模板,支持分表、多站点
这是MYSQL5数据库服务器中存储过程实现部分的分过程控制程序.运用了PLSQL语言来达MYSQL数据库中分表功能,体现了系统的整体性能...
在存储过程中,根据一张主表去创建一张副表。 在根据需要限制的时间,查询主表里面的数据。将主表的数据插入到新建的副表里面同时将主表的数据删除,使用事物进行控制操作的过程
分表是个目前算是比较炒的比较流行的概念,特别是在大负载的情况下,分表是一个良好分散数据库压力的好方法。 首先要了解为什么要分表,分表的好处是什么。我们先来大概了解以下一个数据库执行SQL的过程: 接收到...
oracle存储过程学习经典入门,包含各种 oracle性能调优的方法、如何数据库分区、分表等等、读写分离、主从模式等等oracle常见的操作模式
分表的目的就在于此,减小数据库的负担,缩短查询时间。日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表。这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下...
Oracle数据库里存放着各种各样的数据,其中有一些数据表会随着时间的推移,越来越大。这样的信息又和时间紧密相关,有没有办法让这些日志表能到时间自动分割成历史年月的表呢? 本文介绍了用存储过程定期分割表的方法。
以下是对SQL Server中常用的存储过程进行了介绍。需要的朋友可以过来参考下
项目中有需求要垂直分表,即按照时间区间将数据拆分到n个表中,PostgreSQL提供了分区表的功能。分区表实际上是把逻辑上的一个大表分割成物理上的几小块,提供了很多好处,比如: 1、查询性能大幅提升 2、删除历史...
golang 官方的那个操作mysql的有点麻烦所以就使用了gorm,下面就gorm的使用做下简单介绍,感兴趣的朋友跟随小编一起看看吧
垂直拆分就是要把表按模块划分到不同数据库表中(当然原则还是不破坏第三范式),这种拆分在大型网站的演变过程中是很常见的。当一个网站还在很小的时候,只有小量的人来开发和维护,各模块和表都在一起,当网站不断...
一个查看MSSQLServer数据库空间使用情况的存储过程 SpaceUsed
对mysql优化时一个综合性的技术...e: 存储过程 [模块化编程,可以提高速度] f: 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)
这里的分表逻辑是根据t_group表的user_name组的个数来分的。因为这种情况单独user_name字段上的索引就属于烂索引。起不了啥名明显的效果。1、试验PROCEDURE.DELIMITER $$DROP PROCEDURE `t_girl`.`sp_split_table`$$...
从修改SQL查询语句逻辑到决定创建存储过程实现,花了我3天多的时间,在此总结一下,希望对朋友们有帮助。 数据背景 首先项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据...
技术架构演变过程目录 1.架构演变第一步:物理分离webserver和数据库。 2.架构演变第二步:增加页面缓存 3.架构演变第三步:增加页面片段缓存 4.架构演变第四步:数据缓存 5.架构演变第五步: 增加webserver,应用...