sql server动态存储过程按日期保存数据示例

在项目中经常有大量数据信息保存到数据库,如只用一张表保存那肯定不现实,首选解决方案为按日期建立动态表来保存数据。在不改变保存方式的代码的情况下,用动态存储过程是首选,在sql
server存储过程中进行日期计算,按日期建表效率最高,下面就公司项目的部分动态存储过程粘贴出来:

MySql存储过程动态创建表并插入数据

MySql存储过程动态创建表并插入数据

最近做的一个项目,数据库用的是MySql,对于MySql不是很熟练,只是会简单的应用,毕竟简单的sql语句还是相通的,但是随着项目的深入复杂的sql语句开始慢慢多起来,其中一个小难点就是要根据当天的日期动态创建表,并且向其中插入数据。

具体逻辑可以理解为,先去数据库查询有没有当天的记录表,如果没有则创建表,然后执行当天的日志写入。

Mysql的可视化工具我们用的是navicat,相对来说还是比较好用,当然没有sqlserver
那么人性化(很多快捷键不支持,操作累赘)。下面我就来说一说用navicat如何动态创建数据库表并且插入数据。

一:创建存储过程

图片 1

二:用concat函数拼接动态创建表的语句并执行

图片 2

三:同样用concat函数拼接向动态创建的表写入数据的语句并执行

图片 3

因为数据库表都是固定前缀加当前日期的形式,所以无论创建表还是写入数据其实都是根据动态表来的,所以不能向原来那种固定表一样来写简单的insert
语句,另外,传给存储过程的参数id,并不能直接传给存储的insert语句,会报sql语句错误,所以需要引入局部参数,可能并不是最好的办法,但是目前作者还没找到更好的写法,如果大家有什么更好的或者觉得哪里可以改进的希望多多交流。

 

对于mysql,我们不可忽视其强大,mysql还有很多需要学习的,接下来既然每天都动态生成记录表了,那么肯定需要一个job,来按照一定的时间规律来清除或者备份数据库表,接下来就要研究mysql的job,慢慢来,要学的还很多。

MySql存储过程动态创建表并插入数据
最近做的一个项目,数据库用的是MySql,对于MySql不是很熟练,只是…

-----sql语句:ALTER proc [dbo].[EventInsert]@chrTagData varchar(50), --编号@intEData int,@chrJZData varchar(50),@intDYData int,@intXHData int,@createdata datetime,@chrtype varchar(1) --查询条件asbegindeclare @chrTitle varchar(1000)declare @chrSql nvarchar(4000)declare @chrdate varchar(50)declare @chrMetabname varchar(50) --每日新建报警新表名declare @chrSendtabname varchar(50) --每日新建消息弹出框新表名declare @chrSockDatatabname varchar(50) --每日原始数据新表名set @chrdate =replace(convert(varchar(10),getdate(),120),'-','')set @chrMetabname='SocketMe'+@chrdateset @chrSendtabname='MessSend'+@chrdateset @chrSockDatatabname='SockData'+@chrdateif isnull(@chrtype,'')=''beginreturnendselect @chrTitle=CategoryTitle from EventCategory where CategoryID=@chrtype----新建每日信息模拟表1set @chrsql= 'if not exists(select 1 from sysobjects where name='''+@chrMetabname+''' and type=''U'')beginCREATE TABLE '+@chrMetabname+'(SMeID int IDENTITY(1,1) primary key,tabname varchar(50),TagData varchar(50),TagDataMe varchar(500),Pcount int NULL,Content varchar(5000),UserID int NULL,JZData varchar(50),EData int,DYData int,XHData int,Type varchar(1),State varchar(1),IfClose varchar(1),CloseDate datetime,CreateDate datetime, )end'--print @chrsql exec(@chrsql)--------新建信息模拟表2------------set @chrsql= 'if not exists(select 1 from sysobjects where name='''+@chrSendtabname+''' and type=''U'')beginCREATE TABLE '+@chrSendtabname+'(MessID int IDENTITY(1,1) primary key,TabName varchar(50),TabPrID int,MessTitle varchar(500),TagData varchar(50),TagDataMe varchar(1000),Content varchar(2000),Type varchar(1),CreateDate datetime)end'--print @chrsql exec(@chrsql)-----模拟环境 判断符合条件的数据则插入----------------------set @chrsql= 'if not exists(select 1 from '+@chrMetabname+' whereTagData='''+@chrTagData+''' and type='''+@chrtype+''' and IfClose=''0'')begin--插入表一insert into '+@chrMetabname+' (tabname,TagData,TagDataMe,Content,JZData,EData,DYData,XHData,Type,IfClose,CreateDate,State)--模拟数据select '''+@chrMetabname+''','''+@chrTagData+''',dbo.funTagDataMeget_all('''+@chrTagData+'''),'''+@chrTitle+',位置:[''+dbo.funGetEvenAddget('''+@chrJZData+''')+'']'','''+@chrJZData+''','''+CAST(@intEData as varchar)+''','''+CAST(@intDYData as varchar)+''','''+CAST(@intXHData as varchar)+''','''+@chrtype+''',''0'',getdate(),''0''----dbo.funGetEvenAddget 为自定义函数declare @intSMeID intdeclare @chrtempdate varchar(50)set @intSMeID =@@identity delete '+@chrSendtabname+' whereTagData='''+@chrTagData+''' andtype='''+@chrtype+'''---插入表二insert into '+@chrSendtabname+' (TabName,TabPrID,MessTitle,TagData,Content,Type,CreateDate)select '''+@chrMetabname+''',@intSMeID,dbo.funTagDataMeget_all('''+@chrTagData+''')+'''+@chrTitle+''','''+@chrTagData+''',dbo.funTagDataMeget_all('''+@chrTagData+''')+'''+@chrTitle+',位置:[''+dbo.funGetEvenAddget('''+@chrJZData+''')+'']'','''+@chrtype+''',getdate()end ' print @chrsqlexec(@chrsql)end---根据实际业务进行逻辑处理后插入动态表

发表评论

电子邮件地址不会被公开。 必填项已用*标注