在使用SQL Server存储过程或者触发器时,通常会使用自定义异常来处理一些特殊逻辑。例如游标的销毁,事务的回滚。接下来将会详细的介绍SQL Server自定义异常的使用。

使用“raiserror”来抛出自定义异常。如下代码:在存储过程中,抛出自定义异常,然后在catch块中捕获自定义异常。

IF EXISTS (SELECT * FROM SYSOBJECTS WHERE name='my_sp_test' AND TYPE='P') BEGIN

DROP PROCEDURE my_sp_test;

END;

GO

create procedure my_sp_test @i int, @outstr varchar(100) out as

begin try

declare @j int;

if @i<10 begin

set @outstr = 'system exception.';

set @j = 10/0; -- 因为被除数为0,所以这里将会抛出一个系统的异常

end

else begin

set @j = @i;

set @outstr = 'customer exception';

-- 抛出自定义的异常,在最后的catch块中统一处理异常

RAISERROR (66666, -- Message id.

16, -- Severity,

1 -- State,

) ;

end;

end try

begin catch

if @@ERROR=66666 begin -- 通过@@ERROR的值来判断是否是自定义的异常

set @outstr = @outstr + '---------------- customer exception';

end;

return;

end catch;

go

如上代码,raiserror参数说明:

(1). Message id : 异常的唯一标识,且这个值会被赋值给SQLServer的系统变量@@Error。

自定义异常的Message Id建议使用50000以后的,因为50000以内的会被系统异常占用。

(2). Severity : 异常的级别。 可输入1—19的数值。1—10之间不会被catch捕获。19以后是非常严重的级别。

(3). State : 如果输入负值或大于255 的值会生成错误,产生错误则会中断数据库的连接

执行该存储过程,看看自定义异常是否成功捕获:

DECLARE @OUTSTR11 VARCHAR(100);

exec dbo.my_sp_test 12,@OUTSTR11 out

print @OUTSTR11;

mysql raiserror_SQL Server自定义异常的使用raiserror相关推荐

  1. mysql raiserror_sql server数据库中raiserror函数的用法

    server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误可以被程序捕捉到. raiserror的常用格式如下: r ...

  2. mysql raiserror_sql server数据库中raiserror函数用法的详细介绍

    sql server数据库中raiserror函数的用法 server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误 ...

  3. mysql raiserror_sql server RAISERROR用法介绍

    raiserror  是由单词 raise error 组成 raise  增加; 提高; 提升 raiserror 的作用: raiserror 是用于抛出一个错误. 其语法如下: RAISERRO ...

  4. Starting MySQL....The server quit without updating PID file 处理方法

    报错: Starting MySQL....The server quit without updating PID file ... 查看错误日志 情景1: 120217 15:09:57[ERRO ...

  5. mysql The server quit without updating PID file异常解决办法

    安装好mysql后,用 /usr/local/mysql/bin/mysqld_safe & 去启动mysql,总是处于僵死状态,后来去suport_files 用mysql.server s ...

  6. 偶遇mysql(Percona Server)的一个新bug

    bug的原因是在linux系统下,mysql的配置文件my.cnf的basedir不能使用软连接. 表象如下: #cat /usr/local/mysql/my.cnf | grep basedir ...

  7. centos mysql pid_centos7 mysql The server quit without updating PID file(错误解决)

    1 问题 [root@localhost mysql]# /etc/rc.d/init.d/mysql status MySQL is not running, but lock file (/var ...

  8. oracle rds 运维服务_从运维的角度分析使用阿里云数据库RDS的必要性–你不应该在阿里云上使用自建的MySQL/SQL Server/Oracle/PostgreSQL数据库...

    开宗明义,你不应该在阿里云上使用自建的MySQL or SQL Server数据库,对了,还有Oracle or PostgreSQL数据库. 云数据库 RDS(Relational Database ...

  9. MySQL启动异常Starting MySQL.The server quit without .

    2019独角兽企业重金招聘Python工程师标准>>> MySQL启动异常 Starting MySQL..The server quit without updating PID ...

最新文章

  1. 基于linux的netfilter处理数据包的过程分析,基于Linux的Netfilter处理数据包的过程分析...
  2. oracle 判断如果有符合条件的记录则不插入_Oracle数据库AWR部分报告说明
  3. oracle 数据库运行模式
  4. 百度云cdn设置州五年制大专_图说云原生:让云原生转型变得像种白菜一样简单...
  5. 怎样从php转向java_Github标星10.8K!Java 实战博客项目分享
  6. a76比a73强多少_arm的a73和a72同上10nm,谁强?
  7. 在linux下搭建git环境,在linux下搭建git github开发环境
  8. 禁ping也能ping的工具: tcping
  9. CentOS防止黑客攻击Linux服务器实战演练
  10. NUC1445 Euclid's Game【博弈】
  11. linux-du命令详解
  12. Java——单例模式:饿汉、懒汉模式
  13. 实对称矩阵 二次型 合同 相似对角化
  14. 【20211106】【数据分析】hist 和 bar 的区别
  15. Swagger对自定义入参和出参(过滤器)的支持
  16. RabbitMQ(13)RabbitMQ高级特性:TTL
  17. 让我们一起打起FPGA工程师就业保卫战
  18. polygon java_JAVA Polygon 在配送区域超区校验的实践
  19. python unzip解压缩_Python压缩和解压缩文件(zip/unzip)
  20. 医药企业CRM市场浅谈

热门文章

  1. [转]计算机语言的种类总结
  2. 利用代码改变世界 #AzureDev
  3. jquery的ajax全局事件和AJAX 请求正在进行时显示“正在加载”
  4. python成长之路10——socketserver源码分析
  5. JNI 之 HelloWorld
  6. 数据库安装时的log路径
  7. Elasticsearch--入门-_put post方式添加数据---全文检索引擎ElasticSearch工作笔记005
  8. Rabbitmq工作笔记009---access to vhost ‘/‘ refused for user 权限问题
  9. 数据库工作笔记006---CentOS 初次登录mysql
  10. Linux学习笔记011---编译命令make的认识及使用