`

[SQLServer]错误处理

阅读更多
一.RAISERROR
RAISERROR( {msg_id | msg_str}{,severity, state}
           [, arg[,...n ]] )
           [WITH option [,...n ]]
--msg_id: sqlserver错误消息表中存在的系统和用户定义的消息
--msg_str: 消息字符,可定义文字内的参数
  --% [[flag] [width] [. precision] [{h | l}] ] type
  --flag: 一个代码,用于确定输入值的对齐方式和间距
    ---(减号): 左对齐
    --+(加号): 在值前显示+或-号
    --0: 在输出前添加前缀0
    --#: 依赖于格式化方式,在非零值前添加0,0x或0X
    --(空白): 在前面添加空白前缀 
  --width: 输出的最小宽度
  --precision: 从字符串值的参数值中得到的所使用的字符的最大字符数
  --h: 字符类型
    --d或i: 有符号整数,对于整数
    --o: 无符号八进制数,对于无符号八进制数
    --s: 字符串,对于字符串
    --u: 无符号整数,对于无符号整数
    --x或X: 无符号十六进制数,对于无符号十六进制数
    --p: 对于指针

--severity: 错误严重级别,从无害的1到致命的25
  --2-14常规
  --15警告
  --16以上表示错误
  --20-25严重错误
  --若为11以上,@@ERROR的值被设置为RAISERROR中的消息号
--state: 状态,一般设置为1



WITH选项:
    LOG: 将错误消息放入到windows错误日志中(注意windows错误日志可能被填满)
    NOWAIT: 直接将错误发送给客户
    SETERROR: 只在消息字符串中将错误号复位到50000


--系统存储过程sp_addmessage可用于创建全局的错误消息
sp_addmessage [@msgnum = ] msg_id,          --消息号,通常大于50000
              [@severity = ] severity,      --范围1-25
              [@msgtext = ] 'msg'           --输出的消息
              [, [@lang = ] 'language']     --如果需要定义错误消息的语言
              [, [@with_log = ] 'with_log'] --若使用windows错误消息,可设为true
              [, [@replace = ] 'replace']   --替换一条现有的消息


sp_addmessage 50001,1,'message is ...%010u',@replace='replace'
raiserror(50001,11,1,243)
--输入为
--Msg 50001, Level 11, State 1, Line 1
--message is ...0000000243



二.@@ERROR: 全局变量

最基本的错误处理方式。
SELECT 100/0     --无
SELECT @@ERROR   --8134
SELECT @@ERROR   --0,执行过之后就是0了

RAISERROR ( 50001, 1, 1 )
SELECT @@ERROR   --0,因为严重级别小于11

RAISERROR ( 50001, 11, 1 )
SELECT @@ERROR   --50001,因为严重级别大于等于11

--建议使用TRY...CATCH


三.TRY...CATCH: 可以嵌套
DECLARE @Pv int
BEGIN TRY
    SELECT @Pv = 'abc'
END TRY
BEGIN CATCH
    DECLARE @msg varchar(100)
    SELECT @msg = LTRIM(STR(ERROR_LINE()))+','+ LTRIM(STR(ERROR_NUMBER())) + ',' + ERROR_MESSAGE()
    RAISERROR(@msg,11,1)
END CATCH
--Msg 50000, Level 11, State 1, Line 8
--3,245,Conversion failed when converting the varchar value 'abc' to data type int.

--ERROR_LINE(): 物理行号
--ERROR_NUMBER(): 同消息相关联的消息号
--ERROR_MESSAGE(): 消息文本
--ERROR_PROCEDURE(): 若在存储过程或触发器中使用,将包含其名称,一般使用输出NULL
--ERROR_SEVERITY(): 错误的严重级别数值
--ERROR_STATE(): 错误数字状态值
--注意在try...catch中使用临时表时产生延迟名称解析(deferred name resolution)问题



分享到:
评论

相关推荐

    sql server 2812错误处理

    在还原数据库的时候出现"错误2812:未能找到存储过程'master.dbo.xp_fileexist'", 分析原因:这是因为某个出于安全考虑把系统扩展存储过程所有的动态连接库都删了

    SqlServer 错误代码及说明

    对sqlserver数据库中错误的说明 包括 错误的代码和错误的中文说明,有利于程序错误的处理

    深入理解SQL Server 中的错误处理

    为了能够掌握在SQL Server 2000中错误处理是如何工作的,必须首先要理解数据库事务的概念。在数据库术语中,事务就是指作为一个单独的工作单位出现的一系列语句。举个例子来 说,假设你有三个语句要执行,事务就可以...

    用SQL Server数据库处理数据层错误

    SQLServer的SQL对话让你能够轻松地处理可能会在存储进程、函数里发生的非致命错误,但是并不是所有的错误都很容易处理。事实上,致命和非致命的错误有很多。什么是致命的,什么是非致命的,对此没有很完备的文档说明...

    SQL Server 异地备份到远程共享文件夹异常处理

    说明通过SQL SERVER访问远程地址出现异常,虽然本地系统已经可访问该共享文件夹 解决方案: 1、解锁 SQL SERVER “xp_cmdshell”命令 打开SQL SERVER 新建查询窗口 -- 允许配置高级选项 EXEC sp_configure 'show ...

    SQL Server 2005 php驱动

    该SQL Server 2005 php驱动支持Windows验证,参数绑定(译预处理),大对象流,原数据访问和错误处理. <br>在你使用IIS:Internet Information Services和FastCGI组件,该驱动拥有良好的性能和稳定的Windows平台.

    java连接网络SQLSERVER2000主法及错误处理

    JAVA 连SQLSERVER容易出现的问题及连接网络数据库时如何用机器名连接的问题 。

    Microsoft SQL Server 2005 Express Edition SP3

    由于未在 Windows 中完全配置 Microsoft 分布式事务处理协调器 (MS DTC),因此,应用程序可能无法在分布式事务中登记 SQL Server Express 资源。此问题会影响使用分布式事务的链接服务器、分布式查询以及远程存储...

    从Sqlserver移植到DM参考手册[csdn]

    从Sqlserver迁移到DM数据库介绍文档: 第 1 章 概述 2 第 2 章 移植过程 2 2.1 待移植系统分析 2 2.1.1 统计SqlServer数据库基础信息 2 2.1.2 统计SQLServer数据中的对象以及表数据量 2 2.2 准备移植环境 3 2.2.1 DM...

    SQL SERVER 双引号问题处理

    sql server 默认是用单引号标识字符串的,但有很多时候需要用双引号,例如字符串里本来就包含单引号的时候。但往往设置不允许使用双引号,该解决方案一条语句就搞定双引号问题设置。

    dbForge Studio 2023 for SQL Server Enterprise 6.5.1 x64【亲测官网最新版】

    截止到目前(2023-08-16)官网最新版本,本次新增功能如下: 添加了对 GENERATE_SERIES 和 OPENQUERY ...改进了数据导入功能中的 JSON 文件读取、NULL 值检测和错误处理 修复了数据编辑器中错误地指示缺少 SQL Server

    使用证书设置SQL Server数据库镜像详解

    数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像不能直接访问;它只用在错误恢复的情况下才可以被访问

    Microsoft SQL Server 2005技术内幕: T-SQ程序设计.pdf

    本书涵盖了T-SQL程序设计的方方面面,如基于集合的编程技术、日期和时间相关的XML和CLR数据类型的使用、临时对象、T-SQL和CLR用户自定义函数、存储过程、触发器、事务和新的错误处理结构、应用并发模型支持并发用户...

    SqlServer2008安装报错处理

    本文解决安装SQL Server2008R时试图执行未经授权的操作错误问题,在安装时经常会出现一些错误,弄的我们很烦躁。这里整理了一些在安装时出现错误该如何解决的方法。

    SQL错误处理+SQL2005

    SQL错误处理+SQL2005 SQL2005 SQL

    SQL Server 2000存储过程与XML编程(第2版).part1

    第7章 调试和错误处理 第8章 特殊类型的过程 第9章 高级存储过程编程 第10章 与SQL Server环境交互 第11章 源代码管理和数据库部署 第12章 用于Web搜索引擎的存储过程 第13章 面向数据库开发人员的XML简介 第14章 ...

    SQL Server 2008管理员必备指南(超高清PDF)Part3

    《SQL Server 2008管理员必备指南》适合所有SQL Server用户参考,更是数据库管理员的必备指南。 编辑推荐 《SQL Server 2008管理员必备指南》教你全面掌握SQL Server 2008的必备指南!这本实用指南讲述了SQL Server ...

    SQL Server 2005数据库镜像介绍

    据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中。镜像的拷贝是一个备用的拷贝,不能直接访问;它只用在错误恢复的情况下。因为是在SQL Server 2005中新引入...

    SQL Server 2008管理员必备指南(超高清PDF)Part1

    《SQL Server 2008管理员必备指南》适合所有SQL Server用户参考,更是数据库管理员的必备指南。 编辑推荐 《SQL Server 2008管理员必备指南》教你全面掌握SQL Server 2008的必备指南!这本实用指南讲述了SQL Server ...

    sql server2008高级程序设计(1/2)

    本书首先介绍SQL Server 2008的新功能,然后在更详实的示例代码的引导下全面深入地展开论述,讨论了如何编写复杂查询、构建各种数据结构以及提高应用程序性能,还讲述了如何管理高级脚本和数据库以及如何确定和改正...

Global site tag (gtag.js) - Google Analytics