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

raiserror的常用格式如下:
raiserror('错误的描述',错误的严重级别代码,错误的标识,错误的描述中的参数的值(这个可以是多个),一些其它参数),在官方上的格式描述如下:

  1. RAISERROR ( { msg_id | msg_str | @local_variable }
  2. { ,severity ,state }
  3. [ ,argument [ ,...n ] ] )
  4. [ 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,一个包含错误描述变量,示例:

  1. declare @error_mes varchar(1000)
  2. set @error_mes='这里是错误描述的示例'
  3. 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用法是一样的。示例如下:

  1. declare @error_mes varchar(1000)
  2. set @error_mes='这里是用户%s引发的错误描述'
  3. raiserror(@error_mes,16,1,'张三')

也可以是这样,可能适用性更广些。

  1. declare @error_mes varchar(1000)
  2. declare @error_obj varchar(1000)
  3. select @error_obj=name from table_users where……
  4. set @error_mes='这里是用户%s引发的错误描述'
  5. raiserror(@error_mes,16,1,@error_obj)

上面代码中的%s,代表它要替代是一个字符串,如果我们把示例写成下面这样就会报错了:

  1. declare @error_mes varchar(1000)
  2. set @error_mes='这里是用户%s引发的错误描述'
  3. 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。示例如下:

  1. begin try
  2. raiserror('这是一个错误',16,1) //注意,只有severity级别在11~19之间,控制才会跳转到catch块中。
  3. end try
  4. begin catch
  5. declare @error_message varchar(1000)
  6. set @error_message=error_message()
  7. raiserror(@error_message,16,1)
  8. return
  9. end catch

http://blog.csdn.net/qq_25627143/article/details/50814637

 

sql server数据库中raiserror函数的用法的更多相关文章

  1. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  2. C#同步SQL Server数据库中的数据--数据库同步工具[同步新数据]

    C#同步SQL Server数据库中的数据 1. 先写个sql处理类: using System; using System.Collections.Generic; using System.Dat ...

  3. 浅析SQL Server数据库中的伪列以及伪列的含义

    SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...

  4. sql server数据库中char,varchar,nvarchar字段的区别

    Char,varchar,nvarchar字段是sql server数据库中的三种字段类型.好多人在选择存储的时候不知道如何抉择,我给大家讲下这个三个字段类型的区别. Char(n)是长度为n个字节的 ...

  5. 清空SQL Server数据库中所有表数据的方法(转)

    清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可能陷入 ...

  6. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  7. SQL server数据库中的DateTime类型出现的问题

    我们知道这个SQL server数据库中的DateTime类型是数据库应用开发中经经常使用到的一种数据类型.而C#语言中也有DateTime类型,尽管二者都是用来描写叙述时间的,可是它们的默认值是不同 ...

  8. C#从SQL server数据库中读取l图片和存入图片

    原文:C#从SQL server数据库中读取l图片和存入图片 本实例主要介绍如何将图片存入数据库.将图片存入数据库,首先要在数据库中建立一张表,将存储图片的字段类型设为Image类型,用FileStr ...

  9. 清空SQL Server数据库中所有表数据的方法

    原文:清空SQL Server数据库中所有表数据的方法 其实删除数据库中数据的方法并不复杂,为什么我还要多此一举呢,一是我这里介绍的是删除数据库的所有数据,因为数据之间可能形成相互约束关系,删除操作可 ...

随机推荐

  1. 【转载】COM 组件设计与应用(十八)——属性包

    原文:http://vckbase.com/index.php/wv/1265.html 一.前言 书接上回,本回着落在介绍属性包 IPersistPropertyBag 接口的实现方法和调用方式.属 ...

  2. JAVA中使用RSA通过秘钥文件对字符串进行加密解密

    技术交流群: 233513714 //字符串进行加密算法的名称 public static final String ALGORITHM = "RSA"; //字符串进行加密填充的 ...

  3. 【CJOJ2433】陌上花开 树状数组套替罪羊树

    [CJOJ2433]陌上花开 树状数组套替罪羊树 蛤?bzoj?没权限QAQ 蛤?CDQ?看了好久没看懂QwQ 好吧我会拿cdq再写一遍的 为啥我感觉这东西比cdq好写 只好拿树状数组套替罪羊树水水了 ...

  4. 程序员 vs HR(皮这么一下很开心)

    最近网络上一段 HR VS 程序员 的表情包火了 来来来 我们近距离感受下 来源|网络:http://t.cn/RuTKC8B 哈哈哈!大家可以留言说说你们面试时候的趣事 更多内容关注公众号:51re ...

  5. 发现一个很N且免费的html5拓扑图 关系图 生成组件

    传送门:http://visjs.org/ demo代码 <!doctype html> <html> <head> <title>vis.js new ...

  6. xshell提示评估过期怎么办?

    刚刚打开xshell准备连上虚拟机写代码,结果提示评估过期,真的很气,在百度上找了好久才找到解决办法,现在分享给大家:. 1.复制这个链接在浏览器打开https://www.netsarang.com ...

  7. Unity 几何着色器

    Unity 几何着色器 shaderGeometry Shader几何着色器 Unity 几何着色器 如果学习不能带来价值,那将毫无意义 简介     在顶点和片段着色器之间有一个可选的着色器,叫做几 ...

  8. Netty源码分析第8章(高性能工具类FastThreadLocal和Recycler)---->第3节: recycler的使用和创建

    Netty源码分析第八章: 高性能工具类FastThreadLocal和Recycler 第三节: recycler的使用和创建   这一小节开始学习recycler相关的知识, recycler是n ...

  9. 打包一个传统的ASP.NET web app作为Docker镜像

    (1)针对NerdDinner应用的Dockerfile内容如下 PS E:\DockeronWindows\Chapter02\ch02-nerd-dinner> cat .\Dockerfi ...

  10. i++ i+=1 i=i+1 汇编代码效率比较

    结论:一样.编译器和编译器之间可能有点区别但是程序不会变. 0x00 一直不清楚到底是因为懒还是真的为了效率,要把" i = i + 1 "写成" i++ "或 ...