sql server动态存储过程按日期保存数据示例
在项目中经常有大量数据信息保存到数据库,如只用一张表保存那肯定不现实,首选解决方案为按日期建立动态表来保存数据。在不改变保存方式的代码的情况下,用动态存储过程是首选,在sqlserver存储过程中进行日期计算,按日期建表效率最高,下面就公司项目的部分动态存储过程粘贴出来:
-----sql语句:
ALTERproc[dbo].[EventInsert]
@chrTagDatavarchar(50),--编号
@intEDataint,
@chrJZDatavarchar(50),
@intDYDataint,
@intXHDataint,
@createdatadatetime,
@chrtypevarchar(1)--查询条件
as
begin
declare@chrTitlevarchar(1000)
declare@chrSqlnvarchar(4000)
declare@chrdatevarchar(50)
declare@chrMetabnamevarchar(50)--每日新建报警新表名
declare@chrSendtabnamevarchar(50)--每日新建消息弹出框新表名
declare@chrSockDatatabnamevarchar(50)--每日原始数据新表名
set@chrdate=replace(convert(varchar(10),getdate(),120),'-','')
set@chrMetabname='SocketMe'+@chrdate
set@chrSendtabname='MessSend'+@chrdate
set@chrSockDatatabname='SockData'+@chrdate
ifisnull(@chrtype,'')=''
begin
return
end
select@chrTitle=CategoryTitlefromEventCategorywhereCategoryID=@chrtype
----新建每日信息模拟表1
set@chrsql='
ifnotexists(select1fromsysobjectswherename='''+@chrMetabname+'''andtype=''U'')
begin
CREATETABLE'+@chrMetabname+'(
SMeIDintIDENTITY(1,1)primarykey,
tabnamevarchar(50),
TagDatavarchar(50),
TagDataMevarchar(500),
PcountintNULL,
Contentvarchar(5000),
UserIDintNULL,
JZDatavarchar(50),
EDataint,
DYDataint,
XHDataint,
Typevarchar(1),
Statevarchar(1),
IfClosevarchar(1),
CloseDatedatetime,
CreateDatedatetime,
)
end
'
--print@chrsql
exec(@chrsql)
--------新建信息模拟表2------------
set@chrsql='
ifnotexists(select1fromsysobjectswherename='''+@chrSendtabname+'''andtype=''U'')
begin
CREATETABLE'+@chrSendtabname+'(
MessIDintIDENTITY(1,1)primarykey,
TabNamevarchar(50),
TabPrIDint,
MessTitlevarchar(500),
TagDatavarchar(50),
TagDataMevarchar(1000),
Contentvarchar(2000),
Typevarchar(1),
CreateDatedatetime
)
end
'
--print@chrsql
exec(@chrsql)
-----模拟环境判断符合条件的数据则插入----------------------
set@chrsql='
ifnotexists(select1from'+@chrMetabname+'whereTagData='''+@chrTagData+'''andtype='''+@chrtype+'''andIfClose=''0'')
begin
--插入表一
insertinto'+@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(@intEDataasvarchar)+''','''+CAST(@intDYDataasvarchar)+''','''+CAST(@intXHDataasvarchar)+''',
'''+@chrtype+''',''0'',getdate(),''0''
----dbo.funGetEvenAddget为自定义函数
declare@intSMeIDint
declare@chrtempdatevarchar(50)
set@intSMeID=@@identity
delete'+@chrSendtabname+'whereTagData='''+@chrTagData+'''andtype='''+@chrtype+'''
---插入表二
insertinto'+@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@chrsql
exec(@chrsql)
end
---根据实际业务进行逻辑处理后插入动态表