SQL Server抛出异常信息 RAISERROR

摘要:
它用于数据库向程序抛出特定的异常信息,例如:BEGINTRY/*RAISERROR('ErroraisedinTRY block.',--Messagetext.16,--Severity.1--State.)*/DECLARE@xINT =9; DECLARE@yINT =0; SELECT@x/@y;ENDTRYBEGINCATCHDECLARE@ErrorMessageNVARCHAR (4000); D

用于数据库抛出具体异常信息给程序,示例:
BEGIN TRY
/*
RAISERROR ('Error raised in TRY block.', -- Message text.
16, -- Severity.
1 -- State.
);
*/
DECLARE @x INT=9;
DECLARE @y INT =0;
SELECT @x/@y;
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;
执行后返回信息:
SQL Server抛出异常信息 RAISERROR第1张
来一篇参考文章:http://www.cnblogs.com/xugang/archive/2011/04/09/2010216.html
----------------------------------------------华丽分割线--------------------------------------------------------------
再上一个实际工作中的SQL:
ALTER PROCEDURE [dbo].[UP_ERP_Customer_AddRelations]
(
@CusId BIGINT,
@UserId VARCHAR(100),
@OpenKey VARCHAR(100),
@DeviceId VARCHAR(100),
@IMSI VARCHAR(100),
@AppFrom VARCHAR(100),
@AppVer VARCHAR(100),
@AppType TINYINT,
@SourceId INT,
@LoginType VARCHAR(100),
@UID VARCHAR(100),
@email VARCHAR(100)
)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @flag INT;
BEGIN TRY
BEGIN TRAN;
IF(OBJECT_ID('tempDB..#temp_AddRelations') IS NOT NULL)
BEGIN
DROP TABLE #temp_AddRelations;
END
CREATE TABLE #temp_AddRelations
(
CusId BIGINT,
UserId VARCHAR(100),
OpenKey VARCHAR(100),
DeviceId VARCHAR(100),
IMSI VARCHAR(100),
AppFrom VARCHAR(100),
AppVer VARCHAR(100),
AppType VARCHAR(50),
SourceId VARCHAR(10),
LoginType VARCHAR(100),
PartnerEmail VARCHAR(100),
[UID] VARCHAR(100)
)
INSERT INTO #temp_AddRelations
SELECT
CusId=@CusId,
UserId =@UserId,
OpenKey =@OpenKey,
DeviceId =@DeviceId,
IMSI =@IMSI,
AppFrom =@AppFrom,
AppVer =@AppVer,
AppType =@AppType,
SourceId =@SourceId,
LoginType =@LoginType,
PartnerEmail=@email,
[UID]=@UID
--操作表ThirdPartyUser
DECLARE @source INT
SELECT @source= CASE @LoginType WHEN 'qq' THEN 9 WHEN 'aly' THEN 1 ELSE 0 END
MERGE INTO YinTaiCustomer.dbo.ThirdPartyUser th
USING(
SELECT CusId,UserId,OpenKey,DeviceId,IMSI,AppFrom,AppVer,AppType,SourceId,LoginType,PartnerEmail,[UID]
FROM #temp_AddRelations
) tt ON tt.OpenKey=th.PartnerUserID AND tt.CusId=th.CustomerID
WHEN NOT MATCHED THEN
INSERT VALUES(
tt.CusId,
tt.OpenKey,
tt.PartnerEmail,
@source,
'','','',0,GETDATE(),0,GETDATE(),'',''
);
----操作表customerDeviceValidate
IF(@UID IS NOT NULL AND @UID<>'')
BEGIN
MERGE INTO YinTaiCustomer.dbo.CustomerDeviceValidate d
USING(
SELECT CusId,UserId,OpenKey,DeviceId,IMSI,AppFrom,AppVer,AppType,SourceId,LoginType,PartnerEmail,[UID] FROM #temp_AddRelations
) td ON td.[UID]=d.[UID] AND td.CusId=d.CustomerID
WHEN NOT MATCHED THEN
INSERT VALUES(
td.[UID],
td.CusId,
td.IMSI,
td.DeviceId,
td.AppFrom,
td.SourceId,
GETDATE(),
td.AppType,
td.AppVer
);
END
--操作表UnionRegister
MERGE INTO YinTaiCustomer..UnionRegister u
USING(
SELECT CusId,UserId,OpenKey,DeviceId,IMSI,AppFrom,AppVer,AppType,SourceId,LoginType,PartnerEmail,[UID] FROM #temp_AddRelations
) ut ON ut.PartnerEmail=u.NewAccount
WHEN NOT MATCHED THEN
INSERT VALUES
(
NULL,
ut.PartnerEmail,
NULL,
ut.SourceId,
NULL,
GETDATE(),
NULL,
NULL,
NULL,
NULL
);
SET @flag=1;
COMMIT TRAN;
END TRY
BEGIN CATCH
SET @flag=0;
ROLLBACK TRAN;
/*定义要返回的异常信息变量*/
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
RETURN @flag;
END
如果调用此存储过程中出现异常,就能再程序中CATCH到信息:

SQL Server抛出异常信息 RAISERROR第2张

免责声明:文章转载自《SQL Server抛出异常信息 RAISERROR》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇利用JDBC连接Oracle数据库(转)Nginx常见错误与问题之解决方法技术指南下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

编码解码

包含要编码的URI或其他文本的字符串。此方法的目的是完全编码URI。因此,encodeURI()函数不会转义URI中具有特殊含义的以下ASCII标点符号:;/?返回编码字符串的副本。此方法不编码ASCII字母和数字,也不编码以下ASCII标点符号:-_!提示和注释提示:您可以使用unescape()来解码转义()编码的字符串。...

从零开始制作Galgame——我的Ren'py学习笔记(一)

然后点击“启动工程”点击“开始游戏”效果应该是这样的好了,现在你就制作出了属于自己的第一个游戏角色在一般的Galgame中,不是所有话都是“旁白”说的,一个完整的游戏里面应该有主角那么,怎么在ren'py中定义角色呢我们把刚才的代码更改一下definel=Characterlabelstart:l"HelloWorld!...

开源BI分析工具Metabase配置与完全使用手册

文章目录简介安装初始配置数据分析简单查询创建场景创建集合和仪表盘自定义查询原生查询sql变量动态sql片段管理员操作添加数据库连接oracle成员管理邀请新成员权限配置数据权限文件夹权限邮箱配置定时任务简介Metabase是一个免费的BI分析工具,可以帮助你把数据库中的数据更好的呈现给更多人,通过建立一个”查询“来提炼数据,再以图形化的方式做展示。上手简单,...

Makefile系列之三 : 变量

第二个语法是针对于make命令行带入的变量,或是系统环境变量。...

NFC应用于公交卡

由于历史遗留,NFC的兼容性实在太差。一个完备的NFC产品,应该包括三个部分:NFC硬件、统一的系统接口支持、App。这种情况下,手机NFC相当于公交公司的读卡和写卡器。...

uni-app 安卓和IOS更新方案

热更新资源,即重新安装应用程序,并更新js等前端代码。Android平台更新方案,详见上一篇文章https://www.cnblogs.com/tiandi/p/15331522.html二、2015年,IOS平台苹果发布了一项规定,禁止用户在应用程序中被提示进行版本更新。无法直接更新通用iOSAppstore的安装包。应用程序启动后,检查是否有新版本,该版...