zoukankan      html  css  js  c++  java
  • sql存储过程异常捕获并输出例子还有不输出过程里面判断异常 例子

    编程的异常处理很重要,当然Sql语句中存储过程的异常处理也很重要,明确的异常提示能够快速的找到问题的根源,节省很多时间。
    
    下面,我就以一个插入数据为例来说明Sql Server中的存储过程怎么捕获异常的 。
    
    1、环境
    数据库为Sql Server2008。
    表(Course)结构为:
    No char(10) primary key
    Name varchar(20)
    Comment varchar(50)
    2、存储过程
    就以插入数据为例,其他的可以照着写就行了。
    
    编程语言都有异常的捕获与处理, 在 SqlServer2008 中也是这样子的。
    
    对会出现异常的语句加上 begin try……end try ,然后进行异常捕捉:begin catch……end catch即可。
    
    错误代码详解 很容易就能找到。
    
    代码如下:
    
    Create proc sp_Insert_Course 
        @No char(10), 
        @Name varchar(20), 
        @Comment varchar(50), 
        @rtn int output 
    as 
        begin try 
            insert into Course values(@No,@Name,@Comment) 
            set @rtn=1 
        end try 
        begin catch 
            set @rtn=@@ERROR 
             
            --辅助信息 
            --select ERROR_LINE() as Line, 
            --    ERROR_MESSAGE() as message1, 
            --    ERROR_NUMBER() as number, 
            --    ERROR_PROCEDURE() as proc1, 
            --    ERROR_SEVERITY() as severity, 
            --    ERROR_STATE() as state1 
        end catch 
    3、存储过程执行
    相关代码如下:
    
    declare 
        @rtn int 
    exec sp_Insert_Course '114','语文','',@rtn output 
    print @rtn

    执行结果:
    
    正常的情况下,返回值为1,
    
    如果已经存在编号为“114”的数据,就会返回 ERROR_CODE:2627,
    
    其他的异常情况会返回相应的代码
    
    4、说明
    如果程序有异常,把异常代码返回,然后再进行相关的处理即可。
    
    SQL Server中的异常处理和别的数据库(如Oracle)的有点差异,但是基本思想差不多, 在最后捕获都可以得到异常。
    
    希望能够对大家有所帮助。
    
    原文链接:http://www.cnblogs.com/sshoub/archive/2011/08/12/2136267.html

    另外一个例子 : 过程不输出错误。
    ----------------------------------------------
    
    P_Insert_New_BookTitle_2K
    
    ----------------------------------------------
    
    create proc P_Insert_New_BookTitle_2K
    (@TitleName nvarchar(128),
     @Price money,
     @au_fname nvarchar(32),
     @au_name nvarchar(64),
     @CommissionRating int)
    as
    
    declare     @err int,
            @tablename sysname
    
    begin transaction
    
    insert dbo.Titles (TitleName, Price)
    values (@TitleName, @Price)
    
    select @err = @@error
    if @err <> 0
    begin
        select @tablename = 'titles'
        GOTO ERROR_HANDLER
    end
    
    insert dbo.Authors  (au_fname, au_lname, TitleID, CommissionRating)
    values (@au_fname, @au_fname, @@IDENTITY, @CommissionRating)
    
    if @err <> 0
    begin
        select @tablename = 'authhors'
        GOTO ERROR_HANDLER
    end
    
    GOTO EXIT_Proc
    
    
    ERROR_HANDLER:
    
    ROLLBACK TRANSACTION
    
    -- Log the error 
    insert dbo.Application_Error_Log (tableName, UserName, errorNumber, errorSeverity, errorState)
    values (@tableName, suser_sname(), @err, 0, 0)
    
    EXIT_Proc:
    
    commit tran
     

      

  • 相关阅读:
    带你了解 MySQL Binlog 不为人知的秘密
    算法的空间复杂度
    算法的时间复杂度
    xargs--冬天里的一丝暖意
    "三剑客"之awk心中无剑
    hadoop之yarn(优化篇)
    对hadoop RPC的理解
    mysql优化篇(基于索引)
    [python学习手册-笔记]003.数值类型
    [python学习手册-笔记]001.python前言
  • 原文地址:https://www.cnblogs.com/ilrc/p/5211547.html
Copyright © 2011-2022 走看看