在SQLserver数据库中,如果有很多存储过程的时候,我们会使用动态SQL进行存储过程调用存储过程,这时候,很可能在某个环节就出错了,但是出错了我们很难去跟踪到出错的存储过程,此时我们就可以使用异常处理,通过日志表来记录存储过程的执行情况,然而定位到错误的存储过程,以下是一个存储过程异常处理的小实例:

CREATE DATABASE TEST

USE TEST
/*=====================================================
相关错误消 息如下: ERROR_NUMBER() 返回错误号。 ERROR_SEVERITY() 返回严重性。 ERROR_STATE() 返回错误状态号。 ERROR_PROCEDURE() 返回出现错误的存储过程或 触发器的名称。 ERROR_LINE() 返回导致错误的例程中的行 号。 ERROR_MESSAGE() 返回错误消息的完整文本。
========================================================*/
CREATE TABLE LogTable
(
ID int identity(1,1),--错误序号
ErrorNumber int,--错误号
ErrorSeverity int,--严重性
ErrorState int,--错误状态号
ErrorProducure varchar(200),--出现错误的存储过程或 触发器的名称
ErrorLine int,--导致错误的例程中的行号
ErrorMessage varchar(200)--错误消息的完整文本
) --===============除数不为0的异常捕获=================--
IF EXISTS (SELECT * FROM sysobjects WHERE id=OBJECT_ID(N'getWrong') AND xtype='P')
DROP PROC getWrong
go
CREATE PROC getWrong
AS
BEGIN
-----------------制造异常
BEGIN TRY
SELECT 1/0;
-----------------捕获异常
END TRY
BEGIN CATCH
INSERT INTO LogTable values(ERROR_NUMBER(),ERROR_SEVERITY(),ERROR_STATE(),ERROR_PROCEDURE(), ERROR_LINE() ,ERROR_MESSAGE())
END CATCH
END --执行存储过程
EXEC getWrong
--查看日志表
select * from LogTable
--查看系统日志表
SELECT * FROM sys.messages WHERE message_id=8134 AND language_id=2052

日志表如下:

系统日志表如下:

 从上述2个我们卡可以看出,在系统日志表中我们只可以看到错误的信息,但是不能具体定位到是哪一个具体的存储过程执行后出现的错误。

SQLServer异常捕获的更多相关文章

  1. SQLServer 异常捕获,回滚,再抛出

    一个存储过程中多个更新操作,后面的更新操作出现异常,如果不手动回滚前面修改的数据是不会自动撤销的! BEGIN TRY BEGIN TRAN -- ..... COMMIT TRAN END TRY ...

  2. 存储过程——异常捕获&打印异常信息

    目录 0. 背景说明 1. 建立异常信息表ErrorLog 2. 建立保存异常信息的存储过程 3. 建立在SQL Server中打印异常信息的存储过程 4. 建立一个用于测试的存储过程抛出异常进行测试 ...

  3. .NET 基础 一步步 一幕幕[数组、集合、异常捕获]

    数组.集合.异常捕获 数组: 一次性存储多个相同类型的变量. 一维数组: 语法: 数组类型[] 数组名=new 数组类型[数组长度]; 声明数组的语法: A.数据类型 [] 数组名称= new 数据类 ...

  4. MVC 好记星不如烂笔头之 ---> 全局异常捕获以及ACTION捕获

    public class BaseController : Controller { /// <summary> /// Called after the action method is ...

  5. atitit.js浏览器环境下的全局异常捕获

    atitit.js浏览器环境下的全局异常捕获 window.onerror = function(errorMessage, scriptURI, lineNumber) { var s= JSON. ...

  6. C#中的那些全局异常捕获

    1.WPF全局捕获异常     public partial class App : Application     {         public App()         {    // 在异 ...

  7. Spring-MVC开发之全局异常捕获全面解读

    异常,异常 我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个! 产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息! 在用Spring MVC开发WEB应用时捕获全局异常的方法基本有 ...

  8. JavaScript异常捕获

    理论准备 ★   异常捕获 △ 异常:当JavaScript引擎执行JavaScript代码时,发生了错误,导致程序停止运行: △ 异常抛出:当异常产生,并且这个异常生成一个错误信息: △ 异常捕获: ...

  9. Asp.Net MVC3(三)-MvcApp实现全局异常捕获

    定义异常捕获类: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMu ...

随机推荐

  1. 简单的as3操作xml

    package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import ...

  2. MSP430F149学习之路——SPI

    代码一: //****************************************************************************** //Description: ...

  3. Java创建WebService服务及客户端实现

    简介 WebService是一种服务的提供方式,通过WebService,不同应用间相互间调用变的很方便,网络上有很多常用的WebService服务,如:http://developer.51cto. ...

  4. 洛谷P2751 [USACO4.2]工序安排Job Processing

    P2751 [USACO4.2]工序安排Job Processing 18通过 78提交 题目提供者该用户不存在 标签 难度普及+/提高 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 一家工 ...

  5. PL/SQL中查询某的时间段内所有执行的sql

    清空缓存,重新开始统计执行的SQL alter system flush shared_pool; 查询执行过的SQL select * from v$sql where parsing_schema ...

  6. session StateServer 方式 初始化StateServer服务器

    1.初始化StateServer服务器启动ASP.NET 状态服务[aspnet_state],该服务默认是手动启动的,可以通过修改注册表,设置为自动启动并允许远程连接.修改方法如下:修改注册表: [ ...

  7. Something wrong with EnCase index search in Unallocated area

    hi, My EnCase version is v7 and I found a terrible issue about index search in Unallocated area. Wit ...

  8. com.google.inject.CreationException: Guice creation errors

    错误的原因:xml文件中方法名重复或错误

  9. 【Uploadify】远程上传图片到【七牛云存储】

    1.下载Uploadify版本3.2.1 2.下载七牛SDK 解压后将 qiniu 文件夹copy到uploadify文件夹下 3.修改uploadify.php文件 <?php $verify ...

  10. phalcon框架学习之view

    phalcon框架的view分多级:全局-控制器视图-动作视图.视图由上到下,按层级嵌套. 全局视图 默认全局视图为Views/index.html,所有的页面展示时,默认调用此页面,在这个页面中必须 ...