数据统计存储过程规范(sql server)
2014-11-24 18:56
211 查看
在一个需要做大量数据统计分析的项目里,免不了需要写存储过程。如果过程不多不会有问题,但多了以后,维护和监控会产生很多问题。这时候,最好是对存储过程进行统一规范,对异常进行处理和对运行情况做日志记录。也使不同的人编写的过程格式一致,方便维护。
下面的SQL修改第一行,把"db_xxxx"换成自己的数据库名即可运行。【编写环境:sql server2008】
下面的SQL修改第一行,把"db_xxxx"换成自己的数据库名即可运行。【编写环境:sql server2008】
USE [db_xxxx] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /*------------------------------------------------------------ --功能: 游戏数据统计(按天) --返回: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 = null WITH EXEC AS CALLER AS BEGIN 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()))) + '(分钟)' + @remark print @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 CATCH END
相关文章推荐
- 数据统计存储过程规范(mysql)
- 返回数据库数据的存储过程函数(3个参数)(SQL Server)
- 一个将数据导出到EXCEL的存储过程-数据库专栏,SQL Server
- sql server之触发器调用C#CLR存储过程实现两个表的数据同步
- Sql Server 存储过程中查询数据无法使用 Union(All)
- 将 SQL Server 存储过程用于数据访问
- SQL SERVER 数据导出EXCEL 的存储过程
- SQL SERVER:把表里的数据导出成为INSERT INTO脚本的存储过程
- sql server动态存储过程按日期保存数据示例
- sql server中分页获取数据的存储过程
- sql server动态存储过程按日期保存数据示例
- sql server 批量修改数据表和存储过程的所有者(2000)或架构(2005)
- sql server 表、存储过程数据脚本生成组件
- Sql Server 给表添加合计并统计金额的存储过程!(源代码分享)
- 返回数据库数据的存储过程函数(5个参数)(SQL Server)
- sql server存储过程实例:统计一段时间内各连续ID的价格合计
- sql server存储过程实例:统计一段时间内各连续ID的价格合计
- 配置SQL Server服务代理来发送存储过程数据 SQL Server Service Broker - z
- 将 SQL Server 存储过程用于数据访问
- SQL Server 大量数据的分页存储过程代码