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;
- sql server设置标识列(Sql Server 如何去掉内容里面的Html标签)
- sql server事务回滚(SQL Server 添加Delete操作回滚日志方式)
- sqlserver厉害的函数(SQL Server里书签查找的性能伤害)
- sqlserver的图形表(SQL Server纵表与横表相互转换的方法)
- sql server 锁超时(详解SQL Server中的事务与锁问题)
- SQL Server中查询CPU占用高的SQL语句
- SQL SERVER存储过程中使用事务与try catch
- Sql Server事务日志
- sql server没有服务器怎么办(SQL Server 2012安装后服务器名称找不到的解决办法)
- SQL Server数据类型有哪些
- SQL SERVER ErrorLog文件
- sql server语法大全(SQL Server 全文搜索功能介绍)
- SQL Server免费版的安装以及使用SQL Server Management Studio(SSMS)连接数据库的图文方法(SQL Server免费版的安装以及使用SQL Server Management StudioSSMS连接数据库的图文方法)
- sql server中sleeping状态
- sqlserver实例全库备份(sql server通过脚本进行数据库压缩全备份的方法推荐)
- sql server怎么导出数据库(sqlserver复制数据库的方法步骤图文)
- 《刘老根3》热播,去世15年的她却再次被 伤害(去世15年的她却再次被)
- 十二星座爱情支配欲指数(十二星座爱情支配欲指数)
- 虐待儿童是发泄支配欲的愚蠢行为(虐待儿童是发泄支配欲的愚蠢行为)
- 你或许不知道你隐藏的支配欲望(你或许不知道你隐藏的支配欲望)
- 把宽体丰田86卖了,换成7.5代高尔夫GTI玩起姿态与性能并存的改装(把宽体丰田86卖了)
- 大众推出了第五代高尔夫GT(大众推出了第五代高尔夫GT)
热门推荐
- laravel 数据库实现原理(laravel 数据迁移与 Eloquent ORM的实现方法)
- sql查询地址中包含某个字段(SQL查询字段被包含语句)
- mysql一般使用的事务隔离级别(详解MySQL中事务隔离级别的实现原理)
- python3安装编程环境(Python3 修改默认环境的方法)
- sql语句去除重复记录(使用SQL语句去掉重复的记录两种方法)
- laravel算法(laravel批量生成假数据的方法)
- php网页浏览功能的具体实现(php实现网页上一页下一页翻页过程详解)
- python itchat库介绍(Python利用itchat库向好友或者公众号发消息的实例)
- dedecms怎么上线(dedecms关闭后台/会员/留言/板验证码的方法)
- mysql常用存储方案及基本原理(详解分析MySQL8.0的内存消耗)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9