用于数据库抛出具体异常信息给程序,示例:
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的更多相关文章

  1. 使用SQLdiag Utility搜集SQL Server诊断信息

    SQLdiag Utility用于搜集诊断信息,给Microsoft技术支持人员做为判断依据. 使用SQLdiag 会进行信息搜集类型 Windows 系统性能日志 Windows 系统日志 SQL ...

  2. 全废话SQL Server统计信息(2)——统计信息基础

    接上文:http://blog.csdn.net/dba_huangzj/article/details/52835958 我想在大地上画满窗子,让所有习惯黑暗的眼睛都习惯光明--顾城<我是一个 ...

  3. 全废话SQL Server统计信息(1)——统计信息简介

    当心空无一物,它便无边无涯.树在.山在.大地在.岁月在.我在.你还要怎样更好的世界?--张晓风<我在> 为什么要写这个内容? 随着工作经历的积累,越来越感觉到,大量的关系型数据库的性能问题 ...

  4. SQL Server统计信息:问题和解决方式

    在网上看到一篇介绍使用统计信息出现的问题已经解决方式,感觉写的很全面. 在自己看的过程中顺便做了翻译. 因为本人英文水平有限,可能中间有一些错误. 假设有哪里有问题欢迎大家批评指正.建议英文好的直接看 ...

  5. sql server数据库中raiserror函数的用法

    server数据库中raiserror的作用就和asp.NET中的throw new Exception一样,用于抛出一个异常或错误.这个错误可以被程序捕捉到. raiserror的常用格式如下:ra ...

  6. SQL Server 统计信息

    SELECT * FROM SYS.stats _WA_Sys_00000009_00000062:统计对象的名称.不同的机器名称不同,自动创建的统计信息都以_WA_Sys开头,00000009表示的 ...

  7. SQL SERVER 统计信息概述(Statistics)

    前言 查询优化器使用统计信息来创建可提高查询性能的查询计划,对于大多数查询,查询优化器已经为高质量查询计划生成必要的统计信息,但是在少数情况下,您需要创建附加的统计信息或者修改查询设计以得到最佳结果. ...

  8. 如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示

    今天学习了下如何间接绑定数据库网上看了很多信息,都云里雾里,没有图片说明,初学者完全看不懂,我自己做了一个DEMO,相信可以帮到大家! 一.建立数据库,并构建表信息,我的表信息如下: 表中的数据在数据 ...

  9. SQL Server 统计信息的创建与更新

    前期准备: 普通表.临时表:它两会有统计信息. 表变量:           不会有统计信息. ---------------------------------------------------- ...

随机推荐

  1. python 混入类MixIn

    写在前面 能把一件事情说的那么清楚明白,感谢廖雪峰的官方网站. 1.为什么要用混入类?(小白入门) 继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能. step1: 回忆一下 ...

  2. linux内核中IS_ALIGNED是如何定义的?

    1. 定义如下: (include/linux/kernel.h) #define IS_ALIGNED(x, a)                (((x) & ((typeof(x))(a ...

  3. IO流概述

    作用: 处理设备之间的数据传输的 I: Input(输入) , O: Output(输出) 什么是输入和输出? 我们说输入和输出问题是站在内存的角度而言 , 如果我们程序读取硬盘上的数据那么就是输入 ...

  4. python中列表,元组的乘法

    直接上code吧,还可以这么玩儿 li=[1,] li=li*3 print(li) out: [1, 1, 1] =========== >>> t=(1,2) >>& ...

  5. 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 ...

  6. 数据结构与算法 Javascript描述

    数据结构与算法系列主要记录<数据结构与算法 Javascript描述>学习心得

  7. html页面设置自动刷新

    在中添加如下: <meta HTTP-EQUIV="REFRESH" CONTENT="1"> 其中CONTENT对应刷新的间隔时间,这里为1秒. ...

  8. 微信服务号一些记录,与DTCMS微信功能二次开发

    1.首先必须获得Token CRMComm crm = new CRMComm();            string error = "";            string ...

  9. 20190722java学习习惯小结

    1.周一——周六: 学习: 周日: 巩固练习测试. 2.java 大数据. python 人工智能 .. 3.写技术博客! 4.python应用: 人工智能.web开发.自动化运维.数据分析.爬虫.游 ...

  10. 日常工作问题解决:rhel7下配置多路径设备

    目录 1.情景描述 2.安装多路径软件 2.1 安装多路径 2.2检查安装情况 2.3 重启系统 2.4 将多路径软件添加至内核模块 2.5 检查内核添加情况 2.6 启动multipath服务 2. ...