SQL Server研习录(23)——RAISERROR()函数

SQL Server研习录(23)——RAISERROR函数


版权声明

  • 本文原创作者:清风不渡
  • 博客地址:https://blog.csdn.net/WXKKang

一、RAISERROR()函数

  概念:生成错误消息并启动会话的错误处理。RAISERROR可以引用sys.message目录视图中存储的用户定义消息,也可以动态建立消息。该消息作为服务器错误的消息返回到调用应用程序,或返回到TRY…CATCH构造的关联CATCH块。新应用程序应改用THROW

1、基本语法

  基本语法如下:

-- Syntax for SQL Server and Azure SQL Database(SQL Server和Azure SQL数据库的语法 ) 
RAISERROR ( { msg_id | msg_str | @local_variable }  
			{ ,severity ,state }  
			[ ,argument [ ,...n ] ] )  
			[ WITH option [ ,...n ] ]
			
-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse(用于Azure SQL数据仓库和并行数据仓库的语法)
RAISERROR ( { msg_str | @local_variable }  
			{ ,severity ,state }  
			[ ,argument [ ,...n ] ] )  
			[ WITH option [ ,...n ] ]

  注释:
  (1)参数
  参数msg_id: 使用sp_addmessage存储在sys.message目录视图中的用户定义错误消息号。用户定义的错误消息的错误号应大于50000。若未指定msg_id,RAISERROR会引发一个错误号为50000的错误消息
  参数msg_str: 用户定义的消息,格式与C标准库中的printf函数类似。该错误消息最长可以有2047个字节。如果该消息包含的字符数等于或者超过2048个,则只能显示前2044个并添加一个省略号以表示该消息已被截断。请注意,由于内部存储行为的缘故,代替参数使用的字符数比输出所显示的字符要更多。例如,赋值为2的代言参数%d实际在消息字符串中生成一个字符,但是还会在内部占用另外三个存储字符。此存储要求减少了可用于消息输出的字符数
  若指定了msg_str,RAISERROR会引发一个错误号为50000的错误消息
  msg_str是一个字符串,具有可选的嵌入转换规格。每个转换规格都会定义参数列表中的值如何格式化并将其置于msg_str中转换规格位置上的字段中,转换规格的格式如下:

% [[flag] [width] [. precision] [{h | l}]] type

  可在msg_str中使用的参数包括:
  flag
  用于确定被替换值的间距和对齐的代码:
在这里插入图片描述
  width
  定义放置参数值的字段的最小宽度的整数。 如果参数值的长度等于或大于 width,则打印该值,无需进行填充。 如果该值小于 width,则将该值填充到 width 中指定的长度
  星号 (*) 表示宽度由参数列表中的相关参数指定,该宽度必须为整数值
  精度
  从字符串值的参数值中得到的最大字符数。 例如,如果一个字符串具有五个字符并且精度为 3,则只使用字符串值的前三个字符
  对于整数值,precision 是指打印的最小位数
  星号 (*) 表示精度由参数列表中的相关参数指定,该精度必须为整数值
  {h | l} type
  与字符类型 d、i、o、s、x、X 或 u 一起使用,用于创建 shortint (h) 值或 longint (l) 值,字符类型解释如下:
在这里插入图片描述
  参数local_variable@: 是一个可以为任何有效字符数据类型的变量,其中包含的字符串的格式化方式与 msg_str 相同 。 @local_variable 必须为 char 或 varchar,或者能够隐式转换为这些数据类型
  参数severity: 用户定义的与该消息关联的严重级别。 使用 msg_id 引发使用 sp_addmessage 创建的用户定义消息时,RAISERROR 上指定的严重性会替代 sp_addmessage 中指定的严重性
  注意:任何用户都可以指定 0 到 18 之间的严重级别。 只有 sysadmin 固定服务器角色成员或具有 ALTER TRACE 权限的用户才能指定 19 到 25 之间的严重级别。 若要使用 19 到 25 之间的严重级别,必须选择 WITH LOG 选项。 将小于 0 的严重级别解释为 0。 将大于 25 的严重级别解释为 25,20 到 25 之间的严重级别被认为是致命的。 如果遇到致命的严重级别,客户端连接将在收到消息后终止,并将错误记录到错误日志和应用程序日志
  参数State: 0 到 255 之间的整数。 负值默认为 1。 不应使用大于 255 的值,如果在多个位置引发相同的用户定义错误,则针对每个位置使用唯一的状态号有助于找到引发错误的代码段
  参数argument: 用于代替 msg_str 或对应于 msg_id 的消息中定义的变量的参数。 可以有 0 个或更多个替换参数,但替换参数的总数不能超过 20。 每个替换参数可以是本地变量或下列任何数据类型:tinyint、smallint、int、char、varchar、nchar、nvarchar、binary 或 varbinary。,不支持其他数据类型
  参数option: 错误的自定义选项,可以是下表中的任一值:
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章