用于数据库抛出具体异常信息给程序,示例:
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. 原创 linux 爬虫拨号服务器完整设置

    [root@cloud ~]# cat /home/bh.sh #!/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin:/sbin/ifconfig /usr/s ...

  2. CV2——学习笔记-图像分类

    1.图像分类 • 2.神经网络原理 • 1.卷积神经网络介绍 • 2.利用caffe搭建深度网络做图像分类 挑战:光照变化+形变.类内变化. 标签.预测函数,泛化能力. 如何提高泛化能力?需要用图像特 ...

  3. c#添加资源

    1.在项目目录下创建Resources文件夹,把需要用到的图片放到此文件夹里 2.在项目属性-资源里面添加这些图片 此时就可以在项目里看到资源文件夹及其下的图片了 3.在代码里这样使用这些图片: Im ...

  4. golang 循环创建闭包 问题排查

    ][]string{ { { "邀请码是什么", "我没有邀请码", "这个邀请码我可以随便填吗", "邀请码可以填他的手机号吗& ...

  5. 简易的CRM系统案例SpringBoot + thymeleaf + MySQL + MyBatis版本

    创建maven项目 pop.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns ...

  6. 阶段5 3.微服务项目【学成在线】_day17 用户认证 Zuul_08-用户认证-认证服务查询数据库-用户登录前端

    点击登陆注册链接 跳转到登陆的页面 门户的前端代码 当前路径base64编码 登陆的表单,在学习中心的前端. 这就是登陆的表单 这是表单的校验 请求服务端的接口 登陆请求的方法 请求的地址nginx上 ...

  7. sha256C代码例子

    a.c #include <stdio.h>#include <string.h>#include <openssl/sha.h> 1 int main(int a ...

  8. jmeter 查看结果树,获取响应体写法校验是否提取写法是否正确的方法

    JSON Path Expression里面写入提出值的写法,点击Test测试提取

  9. 123456---com.twoapp.xiaoxiaozuqiujiang---小小足球将

    com.twoapp.xiaoxiaozuqiujiang---小小足球将

  10. spring redistemplate中setHashValueSerializer的设置

    笔者曾经对redis键值使用了不同类型的序列化方法 用过默认值.JdkSerializationRedisSerializer.StringRedisSerializer还用改以下自定类型的序列化工具 ...