SQL Server抛出异常信息 RAISERROR
用于数据库抛出具体异常信息给程序,示例:
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;
执行后返回信息:
来一篇参考文章: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的更多相关文章
- 使用SQLdiag Utility搜集SQL Server诊断信息
SQLdiag Utility用于搜集诊断信息,给Microsoft技术支持人员做为判断依据. 使用SQLdiag 会进行信息搜集类型 Windows 系统性能日志 Windows 系统日志 SQL ...
- 全废话SQL Server统计信息(2)——统计信息基础
接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明--顾城<我是一个 ...
- 全废话SQL Server统计信息(1)——统计信息简介
当心空无一物,它便无边无涯.树在.山在.大地在.岁月在.我在.你还要怎样更好的世界?--张晓风<我在> 为什么要写这个内容? 随着工作经历的积累,越来越感觉到,大量的关系型数据库的性能问题 ...
- SQL Server统计信息:问题和解决方式
在网上看到一篇介绍使用统计信息出现的问题已经解决方式,感觉写的很全面. 在自己看的过程中顺便做了翻译. 因为本人英文水平有限,可能中间有一些错误. 假设有哪里有问题欢迎大家批评指正.建议英文好的直接看 ...
- sql server数据库中raiserror函数的用法
server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误可以被程序捕捉到. raiserror的常用格式如下:ra ...
- SQL Server 统计信息
SELECT * FROM SYS.stats _WA_Sys_00000009_00000062:统计对象的名称.不同的机器名称不同,自动创建的统计信息都以_WA_Sys开头,00000009表示的 ...
- SQL SERVER 统计信息概述(Statistics)
前言 查询优化器使用统计信息来创建可提高查询性能的查询计划,对于大多数查询,查询优化器已经为高质量查询计划生成必要的统计信息,但是在少数情况下,您需要创建附加的统计信息或者修改查询设计以得到最佳结果. ...
- 如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示
今天学习了下如何间接绑定数据库网上看了很多信息,都云里雾里,没有图片说明,初学者完全看不懂,我自己做了一个DEMO,相信可以帮到大家! 一.建立数据库,并构建表信息,我的表信息如下: 表中的数据在数据 ...
- SQL Server 统计信息的创建与更新
前期准备: 普通表.临时表:它两会有统计信息. 表变量: 不会有统计信息. ---------------------------------------------------- ...
随机推荐
- python 混入类MixIn
写在前面 能把一件事情说的那么清楚明白,感谢廖雪峰的官方网站. 1.为什么要用混入类?(小白入门) 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能. step1: 回忆一下 ...
- linux内核中IS_ALIGNED是如何定义的?
1. 定义如下: (include/linux/kernel.h) #define IS_ALIGNED(x, a) (((x) & ((typeof(x))(a ...
- IO流概述
作用: 处理设备之间的数据传输的 I: Input(输入) , O: Output(输出) 什么是输入和输出? 我们说输入和输出问题是站在内存的角度而言 , 如果我们程序读取硬盘上的数据那么就是输入 ...
- python中列表,元组的乘法
直接上code吧,还可以这么玩儿 li=[1,] li=li*3 print(li) out: [1, 1, 1] =========== >>> t=(1,2) >>& ...
- PAT 甲级 1047 Student List for Course (25 分)(cout超时,string scanf printf注意点,字符串哈希反哈希)
1047 Student List for Course (25 分) Zhejiang University has 40,000 students and provides 2,500 cou ...
- 数据结构与算法 Javascript描述
数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得
- html页面设置自动刷新
在中添加如下: <meta HTTP-EQUIV="REFRESH" CONTENT="1"> 其中CONTENT对应刷新的间隔时间,这里为1秒. ...
- 微信服务号一些记录,与DTCMS微信功能二次开发
1.首先必须获得Token CRMComm crm = new CRMComm(); string error = ""; string ...
- 20190722java学习习惯小结
1.周一——周六: 学习: 周日: 巩固练习测试. 2.java 大数据. python 人工智能 .. 3.写技术博客! 4.python应用: 人工智能.web开发.自动化运维.数据分析.爬虫.游 ...
- 日常工作问题解决:rhel7下配置多路径设备
目录 1.情景描述 2.安装多路径软件 2.1 安装多路径 2.2检查安装情况 2.3 重启系统 2.4 将多路径软件添加至内核模块 2.5 检查内核添加情况 2.6 启动multipath服务 2. ...