应用存储过程按月建数据表

原创 2004年11月02日 15:51:00

        为了方便数据库的存储、数据的备份、恢复,在实际建库中,我们希望能够根据具体的年月建立数据表,例如,事件表我们可以建立为EV_yyyymm(yyyy为年份,mm为月份),使用存储过程可以解决动态建表。(源代码如下:)

****************************************************
***                存储过程原码                  ***
****************************************************

====生成表的存储过程prCreateDateTable===
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

ALTER             PROCEDURE prCreateDateTable
AS  
--初始化  
    DECLARE @intErrorCode int,         --错误号,成功显示0
   @dtmCheckDay datetime,     --系统当前时间
   @str varchar(40),@SubStr varchar(10),
   @chrnSQL nvarchar(1000)   --SQL查询语句
    DECLARE @chvSuffixTableName  varchar(50),     --表名称的日期后缀
    @chvFinalTableName1 varchar(40),        --待检测的表名称
    @chvFinalTableName2 varchar(40),
    @chvFinalTableName3 varchar(40),
    @chvFinalTableName4 varchar(40),
    @chvFinalTableName5 varchar(40),
    @chvFinalTableName6 varchar(40),
    @chvFinalTableName7 varchar(40),
    @chvFinalTableName8 varchar(40)

    SELECT @dtmCheckDay = getdate()
    SELECT @chvSuffixTableName = dbo.fnFormatDate_month(@dtmCheckDay)   ---取格式化后的月用到自定义函数

    SELECT @chvFinalTableName1  = 'EV_' + '_' + @chvSuffixTableName 

    --查询有无@chvTableName_XXXXXX(年月),即@chvFinalTableName表,如果没有则建立
BEGIN
 IF NOT EXISTS (SELECT * FROM sysobjects WHERE NAME = @chvFinalTableName1 AND xtype='U')    -- 事件表
    BEGIN
     SELECT @chrnSQL=' CREATE TABLE [dbo].['+ @chvFinalTableName8 +']( '
      +'[EVID] [char] (12) COLLATE Chinese_PRC_CI_AS NOT NULL ,'
      +'[StarTime] [datetime] NOT NULL ,'
      +'[StarStake] [varchar] (9) COLLATE Chinese_PRC_CI_AS NOT NULL ,'
      +'[EndStake] [varchar] (9) COLLATE Chinese_PRC_CI_AS NOT NULL ,'
      +'[Direcation] [char] (1) COLLATE Chinese_PRC_CI_AS NOT NULL ,'
      +'[EvType] [varchar] (3) COLLATE Chinese_PRC_CI_AS NOT NULL ,'
      +'[EndTime] [datetime] NULL ,'
      +'[Description] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,'
      +'[Advice] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,'
      +'[EconLoss] [int] NULL ,'
      +'[DeathToll] [tinyint] NULL, '
      +' CONSTRAINT '+ @chvFinalTableName8 +'_PK '+' PRIMARY KEY CLUSTERED ([EVID])  ON [PRIMARY]'
      +')  ON [PRIMARY]'
           EXEC sp_ExecuteSql @chrnSQL
  END
END;

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

===得到日期的自定义函数====
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO

ALTER  FUNCTION fnFormatDate_Month (@DATE datetime)
RETURNS  varchar(50)
AS 
BEGIN
 declare @intDateYear int,    ---需要处理数据的年份
   @intDateMonthNo int         ---需要处理数据的月份
 declare @chvMonthNo varchar(10) ,
   @chvTableName  varchar(50)

 select @intDateYear = year(@DATE )
 select @intDateMonthNo = month(@DATE)select  @chvMonthNo='00'+convert(varchar(2),@intDateMonthNo)
 select  @chvMonthNo=substring(@chvMonthNo,len(@chvMonthNo)-1 ,2
 select  @chvTableName=convert(varchar(4),@intDateYear)+@chvMonthNo
 return (@chvTableName)
END

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
============================================================

刚毕业,做软件,初学使用存储过程。

Mysql用事件和存储过程每月创建一张数据库表

业务需求每个月创建一张以recharge_gain_为前缀,日期年月为后缀的数据库表,比如:recharge_gain_201612 首先创建存储过程: DELIMITER // CREATE P...
  • heshi111
  • heshi111
  • 2016年12月08日 16:14
  • 2079

Oracle 11g 通过间隔分区实现按月创建表分区

在项目数据库设计过程中由于单表的数据量非常庞大,需要对表进行分区处理。由于表中的数据是历史交易,故按月分区,提升查询和管理。   由于之前对于表分区了解不多,为了实现上述功能查了很多资料,一开始的方...
  • gavinloo
  • gavinloo
  • 2014年05月06日 16:16
  • 23605

mysql存储过程按月创建表分区 方式二

这篇文章与mysql存储过程按月创建表分区 方式一 写的是相同的内容,只是在表分区创建方式上不一样。方式一是以less than(‘YYYY-mm-dd’)含引号作为分区格式,这样分区因为含有了引号...
  • aofavx
  • aofavx
  • 2015年12月24日 11:23
  • 1137

存储过程统计计算

create or replace package body pkg_tcas_hk_team_bonus is /* *计算任务 */ procedure stp_calculate...
  • zhangzikui
  • zhangzikui
  • 2016年06月16日 15:41
  • 1449

MySQL 按月给表分区存储过程

drop procedure if exists p_add_part_month; DELIMITER // create procedure p_add_part_month(tab_name...
  • gua___gua
  • gua___gua
  • 2015年11月26日 20:04
  • 1259

mysql存储过程按月创建表分区 方式一

mysql存储过程创建表分区(一) 关于分区表,表分区 请看:http://www.cnblogs.com/freeton/p/4265228.html 关于定时任务 请看:http://www....
  • aofavx
  • aofavx
  • 2015年12月22日 10:47
  • 6387

存储过程 按月统计格式转换

set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgoALTER PROCEDURE [dbo].[www]@time datetime, @m_id intASIF ...
  • wsg1106
  • wsg1106
  • 2008年06月09日 13:54
  • 245

Oracle 11g 实现按月创建表分区

Oracle 11g 实现按月创建表分区
  • wanlong360599336
  • wanlong360599336
  • 2016年10月10日 15:15
  • 1349

C#开发学习笔记:C#通过存储过程创建数据表

C#开发学习笔记:C#通过存储过程创建数据表
  • JustWantToFly
  • JustWantToFly
  • 2016年09月08日 11:11
  • 767

建按月日自增分区表

一、建按月自增分区表: 1.1建表 SQL> create table month_interval_partition_table (id number,time_col date) parti...
  • hanghangaidoudou
  • hanghangaidoudou
  • 2016年10月07日 15:49
  • 638
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:应用存储过程按月建数据表
举报原因:
原因补充:

(最多只允许输入30个字)