SQL回爐系列(三) 拆分原始資料到對應的月份表中

2021-07-07 09:26:20 字數 2589 閱讀 7964

存放原始資料的表,需要定期把歷史資料遷移並固定儲存下來,否則原始資料表越來越大,不利於資料的頻繁插入和查詢。

下面的sql語句是乙個儲存過程,每日0點執行,把前一天或前幾天的資料遷移到對應的月份表中。

use [prodms]

goset ansi_nulls on

goset quoted_identifier on

goalter proc [dbo].[splitoriginalvalue]

asbegin

declare @day

int,@month

int,@year

intdeclare @tbname varchar(35),@sql nvarchar(4000),@parmas nvarchar(2000)

select @day= datepart (dd,min(gettime)) ,@month=datepart(mm,min(gettime)),@year=datepart(year,min(gettime)) from cf_originaldata

if(@month

<10)

set @tbname='cf_originaldata_'+convert(varchar(4),@year)+'_0'+convert(varchar(2),@month)

else

set @tbname='cf_originaldata_'+convert(varchar(4),@year)+'_'+convert(varchar(2),@month)

--如果不存在該月份的表名需要新建乙個該月份的表

ifnotexists(select * from sysobjects where name=@tbname)

begin

set @sql='

create table '+@tbname+'

(autoid int identity (1,1) primary key,

ua decimal(10,2),

ub decimal(10,2),

uc decimal(10,2),

ia decimal(10,2),

ib decimal(10,2),

ic decimal(10,2),

py decimal(10,2),

qw decimal(10,2),

pf decimal(10,2),

ep decimal(12,2),

back varchar(5),

f decimal(10,2),

gettime datetime,

number nvarchar(20) )'

execute ( @sql)

endif @day

and @month=datepart(mm,getdate()) -- 判斷originaldata中最早的資料是否小於今天且是同乙個月的

begin

-- 插入資料到月份表中

set @sql=' insert into ' +@tbname+' (ua, ub, uc, ia, ib, ic, py, qw, pf, ep, back, f, gettime, number )

select ua, ub, uc, ia, ib, ic, py, qw, pf, ep, back, f, gettime, number from cf_originaldata

where convert(varchar(10),gettime,120)<= convert(varchar(10),dateadd(dd,-1,getdate()),120)'

execute ( @sql)

-- 刪除originaldata中的資料

delete

from cf_originaldata where convert(varchar(10),gettime,120)<= convert(varchar(10),dateadd(dd,-1,getdate()),120)

endelse -- 新的月份

begin

set @sql=' insert into ' +@tbname +'

( ua, ub, uc, ia, ib, ic, py, qw, pf, ep, back, f, gettime, number ) '

+ ' select ua, ub, uc, ia, ib, ic, py, qw, pf, ep, back, f, gettime, number from cf_originaldata where datepart(dd,gettime)= @days '

execute ( @sql)

-- 刪除originaldata中的資料

delete

from cf_originaldata where datepart(dd,gettime)= @day

and datepart(mm,gettime)= @month

and datepart(yyyy,gettime)= @year

endend

回爐重造,第三話 PHP順序控制

今天,陪姐姐去看樓,簽合同,這裡為自己鼓勵下,相信日後自己也能有屬於自己的房子 好啊,接下來,繼續學習php基礎知識 順序控制 順序控制即不加控制的流程,預設從上到下,從左到右執行 分支控制 簡單定義 有選擇的執行 1.單分支控制 if 條件表示式 判斷真假 小例子 age 18 if age 18...

SQL總結系列

總結sql基本知識 用法,並結合多年的應用對sql有關的相關知識進行總結。希望這些分享能給大家帶來一些幫助,如有不足或錯誤,請批評指正。2 查詢相關,包括基本查詢 分組排序 聚合函式 連表查詢 內連線 外連線 全連線 交叉連線 幾乎涵蓋常用查詢語句 3 實戰與練習,通過一些經典的題目,來挖掘如何處理...

SQL常用問題 分拆列值

分拆列值 原著 鄒建 改編 愛新覺羅.毓華 十八年風雨,守得冰山雪蓮花開 2007 12 16 廣東深圳 有表tb,如下 id value 1 aa,bb 2 aaa,bbb,ccc 欲按id,分拆value列,分拆後結果如下 id value 1 aa 1 bb 2 aaa 2 bbb 2 ccc...