sql server数据库中raiserror函数的用法
server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误。这个错误可以被程序捕捉到。
raiserror的常用格式如下:
raiserror('错误的描述',错误的严重级别代码,错误的标识,错误的描述中的参数的值(这个可以是多个),一些其它参数),在官方上的格式描述如下:
- RAISERROR ( { msg_id | msg_str | @local_variable }
- { ,severity ,state }
- [ ,argument [ ,...n ] ] )
- [ WITH option [ ,...n ] ]
其中,[ ,argument [ ,...n ] ]与 [ WITH option [ ,...n ] 两项是可以不写的。
分别解释一下各参数的用法:
一、{ msg_id | msg_str | @local_variable }
从这个参数中可以看出,这一项可能为三个值,
1,sys.messages中的自定义错误信息的错误信息号,自定义错误信息可以使用sp_addmessage存储过程添加到sys.messages中,注意, 用户定义错误消息的错误号应当大于 50000。
示例:raiserror(50001,16,1)
2,一条直接的错误描述,示例:raiserror('这里是错误描述的示例',16,1)
3,一个包含错误描述变量,示例:
- declare @error_mes varchar(1000)
- set @error_mes='这里是错误描述的示例'
- raiserror(@error_mes,16,1)
二、severity
这个参数为用户定义的该错误信息的级别,我们可以指定 0 到 18 之间的严重级别。只有 sysadmin 固定服务器角色成员或具有 ALTER TRACE 权限的用户才能指定 19 到 25 之间的严重级别。若要使用 19 到 25 之间的严重级别,必须选择 WITH LOG 选项。
注意,如果错误级别在20~25之间,那么数据库会认为这个错误是致命,那么数据库会将该错误记录到错误日志和应用程序日志后终止数据库的连接。任何小于 0 的严重级别被认为等于0。大于 25 的严重级别被认为等于25。
三、state
这个参数是可以是1~127之间任意整数,可以用来标识错误的发生位置,如果一段代码的多个位置都会发生同样的错误,那么就可以将这个参数设置为不同的值,用来标识是那个位
置发生错误了。
四、[ ,argument [ ,...n ] ]
如果参数{ msg_id | msg_str | @local_variable }中包含了一些代替符,那么这个参数就是代替符的具体的值,这个和asp.Net中的string.Format用法是一样的。示例如下:
- declare @error_mes varchar(1000)
- set @error_mes='这里是用户%s引发的错误描述'
- raiserror(@error_mes,16,1,'张三')
也可以是这样,可能适用性更广些。
- declare @error_mes varchar(1000)
- declare @error_obj varchar(1000)
- select @error_obj=name from table_users where……
- set @error_mes='这里是用户%s引发的错误描述'
- raiserror(@error_mes,16,1,@error_obj)
上面代码中的%s,代表它要替代是一个字符串,如果我们把示例写成下面这样就会报错了:
- declare @error_mes varchar(1000)
- set @error_mes='这里是用户%s引发的错误描述'
- raiserror(@error_mes,16,1,1)
因为1不是一个字符串,如果要替代是一个整数,就需要使用%i或者%d了。所有的对应关系如下:
1,%d或%i代表有符号整数
2,%u代表无符号整数
3,%o代表无符号八进制数
4,%s代表字符串
5,%x或%X代表 无符号十六进制数
五、[ WITH option [ ,...n ] ]
该参数为错误的自定义选项,可以是下面三个值中的一个:
1,LOG--在 Microsoft SQL Server 数据库引擎 实例的错误日志和应用程序日志中记录错误。记录到错误日志的错误目前被限定为最多 440 字节。只有 sysadmin 固定服务器角色
成员或具有 ALTER TRACE 权限的用户才能指定 WITH LOG。
2,NOWAIT--将消息立即发送给客户端。
3,SETERROR--将 @@ERROR 值和 ERROR_NUMBER 值设置为 msg_id 或 50000,不用考虑严重级别。
我们还可以在Begin catch中使用raiserror。示例如下:
- begin try
- raiserror('这是一个错误',16,1) //注意,只有severity级别在11~19之间,控制才会跳转到catch块中。
- end try
- begin catch
- declare @error_message varchar(1000)
- set @error_message=error_message()
- raiserror(@error_message,16,1)
- return
- end catch
http://blog.csdn.net/qq_25627143/article/details/50814637
sql server数据库中raiserror函数的用法的更多相关文章
- 转:SQL SERVER数据库中实现快速的数据提取和数据分页
探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...
- C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]
C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...
- 浅析SQL Server数据库中的伪列以及伪列的含义
SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...
- sql server数据库中char,varchar,nvarchar字段的区别
Char,varchar,nvarchar字段是sql server数据库中的三种字段类型.好多人在选择存储的时候不知道如何抉择,我给大家讲下这个三个字段类型的区别. Char(n)是长度为n个字节的 ...
- 清空SQL Server数据库中所有表数据的方法(转)
清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...
- .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)
.NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...
- SQL server数据库中的DateTime类型出现的问题
我们知道这个SQL server数据库中的DateTime类型是数据库应用开发中经经常使用到的一种数据类型.而C#语言中也有DateTime类型,尽管二者都是用来描写叙述时间的,可是它们的默认值是不同 ...
- C#从SQL server数据库中读取l图片和存入图片
原文:C#从SQL server数据库中读取l图片和存入图片 本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStr ...
- 清空SQL Server数据库中所有表数据的方法
原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可 ...
随机推荐
- PyQt5 笔记(03):弹出窗口大全
本文实现了PyQt5个各种弹出窗口:输入框.消息框.文件对话框.颜色对话框.字体对话框.自定义对话框 其中,为了实现自定义对话框的返回值,使用了信号/槽 本文基于 windows 7 + python ...
- 柯朗微积分与数学分析习题选解(1.3 节 b)
一直在读<陶哲轩实分析>,陶的书非常的严谨,环环相扣,但是也有个缺点就是计算性的例子和应用方面的例子太少了.所以就又找了本柯朗的<微积分与数学分析>搭配着看.柯朗的书的习题与陶 ...
- 项目中 Spring 配置文件的选型问题 (xml和注解的抉择)
要改的东西用xml 不改的东西用注解:这句是对用不用注解或者 xml的一个不错的解决方案 xml使用场景: 1.外部jar包依赖bean配置 2.用注解无法实现,或者用注解无法轻易实现的情形 3.项目 ...
- Java并发工具类(二):同步屏障CyclicBarrier
作用 CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point),才继续执行. 简介 CyclicBarrier 的字面意 ...
- Python之面向对象的组合、多态、菱形问题、子类中重用父类的两种方式
一.组合 ''' 1.什么是组合 组合就是一个类的对象具备某一个属性,该属性的值是指向另外一个类的对象 2.为何用组合 组合也是用来解决类与类直接代码冗余问题的 3.如何用组合 ''' # 继承减少代 ...
- IIS7 增加JSON文件解析
在MIME增加一个Json类型,在MIME增加一个配置如:添加---> 文件扩展名为 .JSON ,MIME类型为text/json(也有将application/x-javascript) 然 ...
- 稳重商务风格教师求职简历免费word模板
30款稳重商务风格教师求职简历免费word模板,也可用于其他专业和职业,个人免费简历模板,个人简历表免费,个人简历表格. 声明:该简历模板仅用于个人欣赏使用,请勿用于商业用途,谢谢. 下载地址:百度网 ...
- 微信小程序云开发
什么是云开发? 云开发是由腾讯云联合微信团队为开发者提供的 包含 云函数.云数据库和云文件存储能力的后端云服务 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 A ...
- Jmeter性能指标分析
以下是下载了服务器监控插件的各个组件的功能介绍,有助于以后jmeter的性能测试 1.jp@gc - Actiive Threads Over Time:不同时间的活动用户数量展示(图表) 当前的时间 ...
- Python之Django基本命令
一.新建项目 $django-admin.py startproject project_name # 特别是在 windows 上,如果报错,尝试用 django-admin 代替 django-a ...