数据统计存储过程规范(sql server)

来源:互联网 发布:python url下载文件 编辑:程序博客网 时间:2024/05/20 12:24

    在一个需要做大量数据统计分析的项目里,免不了需要写存储过程。如果过程不多不会有问题,但多了以后,维护和监控会产生很多问题。这时候,最好是对存储过程进行统一规范,对异常进行处理和对运行情况做日志记录。也使不同的人编写的过程格式一致,方便维护。


    下面的SQL修改第一行,把"db_xxxx"换成自己的数据库名即可运行。【编写环境:sql server2008】

USE [db_xxxx]GOSET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO/*--------------------------------------------------------------功能: 游戏数据统计(按天)--返回:0-成功; 1-失败◆测试  exec p_stat_xxxx;  exec p_stat_xxxx '2014-11-18';◆修改记录: 日期 描述 作者  1. 2014.11.06 xxname 创建------------------------------------------------------------*/create PROCEDURE p_stat_xxxx  @dt datetime = nullWITH EXEC AS CALLERASBEGIN  DECLARE @step INT;  DECLARE @datadate VARCHAR(10); --数据日期  DECLARE @dbname VARCHAR(20); --当前数据库名  DECLARE @procname VARCHAR(100); --本过程名称  DECLARE @optproc VARCHAR(100); --过程调用的过程  DECLARE @tablename VARCHAR(100); --过程当前处理的表名  DECLARE @err_msg VARCHAR(500); --出错时的错误描述  DECLARE @remark VARCHAR(500); --备注  DECLARE @start_tm DATETIME; --开始时间  SET @dbname    = DB_NAME();  SET @procname  = 'p_stat_xxxx';  SELECT @step      = 0,         @optproc   = '',         @tablename = '',         @remark    = '游戏数据统计',         @err_msg   = '',         @start_tm  = getdate();   IF @dt IS NULL    BEGIN      SET @dt = CONVERT(varchar(10), getdate() - 1, 120); --得到昨天的日期:2014-04-04    END  SET @datadate  = CONVERT(VARCHAR(10), @dt, 120); --数据日期:2014-04-04  --===========================================================================      BEGIN TRY--记录日志    INSERT INTO t_run_log(dbname, datadate, step, procname, optproc, tablename, result, err_msg, tm, remark)    VALUES (@dbname, @datadate, @step, @procname, @optproc, @tablename, 'begin', @err_msg, getdate(), @remark);    ---------------------------------此处写业务SQL end--------------------------------游戏日报统计    SET @step = 1------xxxx数据统计SET @step = 2------------------------------------此处写业务SQL start------------------------------    SET @remark  = @remark + '成功,耗时' + CONVERT(VARCHAR, DATEDIFF(SECOND, @start_tm, getdate()) / 60.00) +                       '(分钟)' + @remark--记录日志    INSERT INTO t_run_log(dbname, datadate, step, procname, optproc, tablename, result, err_msg, tm, remark)    VALUES      (@dbname, @datadate, @step, @procname, @optproc, @tablename, 'success', @err_msg, getdate(), @remark)    RETURN 0;  END TRY    BEGIN CATCH    --错误处理    DECLARE @ErrMsg VARCHAR(4500)    SET @ErrMsg      = 'Procedure:' + ISNULL(ERROR_PROCEDURE(), '-') + ' ErrorLine:' + CONVERT(VARCHAR(10), ERROR_LINE()) +                       ' ErrorNumber:' + CONVERT(VARCHAR(10), ERROR_NUMBER()) + ' Message:' + ERROR_MESSAGE();    SET @err_msg     = @ErrMsg;    SET @remark      = 'step: '+cast(@step as varchar(10))+'  失败,耗时' + CONVERT(VARCHAR, abs(datediff(mi, @start_tm, getdate()))) + '(分钟)' + @remarkprint @remark;--记录日志    INSERT INTO t_run_log(dbname, datadate, step, procname, optproc, tablename, result, err_msg, tm, remark)    VALUES      (@dbname, @datadate, @step, @procname, @optproc, @tablename, 'fail', @err_msg, getdate(), @remark)    RETURN 1;  END CATCHEND


0 0