SQL Server中raiserror
SQL Server中raiserror
SQL Server中raiserror一、raiserror语法
RAISERROR ( { msg_id | msg_str | @local_variable }
{ ,severity ,state }
[ ,argument [ ,...n ] ]
)
[ WITH option [ ,...n ] ]
参数说明
第一个参数:{ msg_id | msg_str | @local_variable }
msg_id:消息代号,用户定义错误消息的错误号应当大于 50000。
msg_str:用户定义的错误消息,该错误消息最长可以有 2047 个字符;当指定 msg_str 时,RAISERROR 将引发一个错误号为 5000 的错误消息。
@local_variable:按照 msg_str 方式的格式化字符串变量。
第二个参数:severity
用户定义的与该消息关联的严重级别。任何用户都可以指定 0 到 18 之间的严重级别。
1、[0,10]的闭区间内,不会跳到catch;
2、如果是[11,19],则跳到catch;
3、如果[20,无穷),则直接终止数据库连接;
第三个参数:state
1、如果在多个位置引发相同的用户定义错误,则针对每个位置使用唯一的状态号有助于找到引发错误的代码段。
2、其值为 介于 1 至 127 之间的任意整数。(state 默认值为1)
第四个参数:argument
用于代替 msg_str 或对应于 msg_id 的消息中的定义的变量的参数。
第五个参数:option
错误的自定义选项,可以是下表中的任一值:
LOG :在错误日志和应用程序日志中记录错误;
NOWAIT:将消息立即发送给客户端;
SETERROR:将 @@ERROR 值和 ERROR_NUMBER 值设置为 msg_id 或 50000
二、SQL Server中raiserror实例
1、
DECLARE @raiseErrorCode nvarchar(50)
SET @raiseErrorCode = CONVERT(nvarchar(50), YOUR UNIQUEIDENTIFIER KEY)
RAISERROR('%s INVALID ID. There is no record in table',16,1, @raiseErrorCode)
2、
RAISERROR (
N'This is message %s %d.', -- Message text,
10, -- Severity,
1, -- State,
N'number', -- First argument.
-- Second argument.
);
-- The message text returned is: This is message number 5.
GO
3、
RAISERROR (N'<<%*.*s>>', -- Message text.
10, -- Severity,
1, -- State,
7, -- First argument used for width.
3, -- Second argument used for precision.
N'abcde'); -- Third argument supplies the string.
-- The message text returned is: << abc>>.
GO
4、从 CATCH 块返回错误消息
以下代码示例显示如何在 TRY 块中使用 RAISERROR 使执行跳至关联的 CATCH 块中。它还显示如何使用 RAISERROR 返回有关调用 CATCH 块的错误的信息。
BEGIN TRY
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
-- State.
);
END TRY
BEGIN CATCH
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
SELECT
@ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
END CATCH;
5、
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
执行该存储过程:
DECLARE @OUTSTR11 VARCHAR(100);
exec dbo.my_sp_test 12,@OUTSTR11 out
print @OUTSTR11;
- 查sqlserver锁表语句(Sql Server如何查看被锁的表及解锁的方法)
- sqlserver2012登录出现报错18456(SQL Server 2012 sa用户登录错误18456的解决方法)
- sql server 2008自定义函数(SQL SERVER 2012新增函数之逻辑函数CHOOSE详解)
- SQL Server数据库应用中有用的几个工具
- Sql Server中的Null值
- sql server设置自增(sql server建表时设置ID字段自增的简单方法)
- sql server提供的聚合函数(SQLServer行列互转实现思路聚合函数)
- SQL SERVER数据类型对应C#的数据类型
- SQL Server Check 约束
- sql server中PageLatch和PageIOLatch等待
- sqlserver 高级查询(SQL Server2019数据库之简单子查询的具有方法)
- sql server 字符串处理(SQL Server中利用正则表达式替换字符串的方法)
- sql server附加数据库出错(SQL Server附加数据库报错无法打开物理文件,操作系统错误5的图文解决教程)
- sqlserver新建连接服务器卡住(SQL Server成功与服务器建立连接但是在登录过程中发生错误的快速解决方案)
- Sql Server profiler 分析器的理解
- 无法打开sql server的连接(由于系统错误 126 SQL Server,指定驱动程序无法加载)
- 爱情是什么(爱情是什么最经典的话)
- 乔欣 古装剧中的高颜值(古装剧中的高颜值)
- 怎么才可以财富自由(如何让自己实现财富自由)
- 为什么越来越多年轻人回农村(为什么越来越多年轻人回农村生活)
- 怎么快速学好英语(怎么快速学好英语初中)
- 中国留学生都是富二代吗()
热门推荐
- html5怎么设置倾斜(HTML5 body设置自适应全屏)
- ocr公式识别python(初探利用Python进行图文识别OCR)
- mysql 死锁查询(MySQL slave 延迟一列 外键检查和自增加锁)
- vmware esxi 网络配置(探索VMware ESXI CLI常用命令)
- docker的一些使用方法(使用Docker 安装 Jenkins的方法)
- css特效边框流线动画(CSS 动画实现动态气泡背景的方法)
- dedecms最新手册(在自己的php页面中使用dedecms标签的代码示例)
- 阿里云docker 基础镜像(Docker 配置阿里云容器服务操作)
- react动态添加组件属性(react使用antd的上传组件实现文件表单一起提交功能完整代码)
- 相对布局和线性布局的区别(面试必问:圣杯布局和双飞翼布局的区别)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9