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
     

      

  • 相关阅读:
    三次请求(读-改-读)引出nibernate 一级缓存
    算法竞赛入门经典第一、二章摘记
    uva 10905 Children's Game
    uva 11205 The broken pedometer
    uva 10160 Servicing stations
    uva 208 Firetruck
    uva 167 The Sultan's Successors
    zoj 1016 Parencodings
    uva 307 Sticks
    uva 216 Getting in Line
  • 原文地址:https://www.cnblogs.com/ilrc/p/5211547.html
Copyright © 2011-2022 走看看