前些日子客户过来个需求,是要把以前所有DB里面记录用户消费coinlog的表做统一成一样的字段(以前由于DB很多LOG表很乱)。上个礼拜把设计书写好后,今天开始写存储过程。很久没有写存储过了,上午在网上做功课下午写,还好有公司前辈高手指导算是在下班前完成了。把写的存储过程的代表性的一个记录一下,以便以后温习只用。
?
作业内容:将某DB的原来coinLog表内的某些字段根据条件复制到新表中,每一天复制前一天产生的数据,具体procedure如下:
?
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo-- =============================================-- Author: Jiang -- create Date: 2011/05/09-- Description: 邦楽フルプラスEZコインログ出力-- =============================================ALTER PROCEDURE [dbo].[CopyTo_CoinEventLog_FullpE] ASBEGINBEGIN TRAN SET NOCOUNT ON; INSERT CoinEventLog_FullpE ( uid, --ユーザーID credit_coin, --イベントコイン rest_coin, --残りコイン event_cd, --イベントコード event_desc, --イベント詳細記述 upd_nm, --レコード更新者 upd_pg, --レコード更新プログラム upd_dt --レコード更新時間 ) SELECT uid, credit_coin, rest_coin, CASE WHEN [event_cd] = 'give' OR [event_cd] = 'change' THEN 'give' WHEN [event_cd] = 'use' THEN 'use' WHEN [event_cd] = 'lost' THEN 'lost' WHEN [event_cd] = 'takeover' THEN 'takeover' WHEN [event_cd] = 'campaign' THEN 'campaign' ELSE '' -- 'give','use','lost','takeover','change',campaign以外の値なら、''に設定する END, event_desc, upd_nm, upd_pg, upd_dt FROM fullp_e.dbo.CoinEventLog --前日の1日分のコインログを抽出する WHERE upd_dt >= CONVERT(varchar(10), getdate() - 1, 111) and upd_dt < CONVERT(varchar(10), getdate(), 111) IF @@error<>0 BEGIN rollback tran return ENDCOMMIT TRANEND