• 存储过程中的错误处理


    如果存储过程执行中遇到了错误(严重错误),就会终止sp的执行,但是如果想让sp跳过错误,继续执行后面的语句,怎么办?

    1,在sql server 2005中可以用try...catch解决。

    代码
    CREATE TABLE testTable
    (
        id 
    int IDENTITY(1,1),
        name 
    nvarchar(20NOT NULL,
        pass 
    nvarchar(20)
    )

    CREATE PROCEDURE testTableInsert

        
    @name nvarchar(20),
        
    @pass nvarchar(20)

    AS

        
    BEGIN TRY
            
    INSERT INTO testTable
            
    VALUES(@name,@pass)
        
    END TRY
        
    BEGIN CATCH
            
    PRINT @@error
            
    PRINT 'error'        
        
    END CATCH
        
        
    SELECT * FROM Test--(怎是存在的表)
        
        

    EXEC testTableInsert null,'test'

    2,sql server 2005之前,用sp嵌套的方法(来自zjcxc(邹建))

    代码
    --下面演示了SQL错误处理的脆弱性   
        
      
    --测试的存储过程1   
      create   proc   p1   
      
    as   
      
    print   12/0   
      
    if   @@error<>0   
      
    print   'error 1'   
        
      
    select   *   FROM SwcPage 
      
    if   @@error<>0   
      
    print   'error 2'   
      
    go   
        
      
    --调用   
      exec   p1   
      
    go   
        
      
    --删除测试   
      drop   proc   p1   
        
      
    /*--测试结果   
        
      服务器:   消息   8134,级别   16,状态   1,过程   p1,行   6   
      遇到被零除错误。   
      发生错误1   
      服务器:   消息   208,级别   16,状态   1,过程   p1,行   10   
      对象名   'newid'   无效。   
        
      --
    */   
    代码
    --下面演示了SQL错误处理的脆弱性   
        
      
    --演示2,存储过程嵌套调用中的错误   
        
      
    --测试的存储过程1   
      create   proc   p1   
      
    as   
      
    print   12/0   
      
    if   @@error<>0   
      
    print   'error 1'   
        
      
    select   *   from   newid()   
      
    if   @@error<>0   
      
    print   'error 2'   
      
    go   
        
      
    --测试的存储过程2   
      create   proc   p2   
      
    as   
      
    exec   p1   
        
      
    if   @@error<>0   
      
    print   'call sp1 error end'   
      
    else   
      
    print   'call sp1 normal end'   
      
    go   
        
      
    --调用   
      exec   p2   
      
    go   
        
      
    --删除测试   
      drop   proc   p1,p2   
        
      
    /*--测试结果   
        
      服务器:   消息   8134,级别   16,状态   1,过程   p1,行   8   
      遇到被零除错误。   
      发生错误1   
      服务器:   消息   208,级别   16,状态   1,过程   p1,行   12   
      对象名   'newid'   无效。   
      调用   存储过程1   异常结束   
      --
    */   

  • 相关阅读:
    ASP.NET C# 邮件发送全解
    .NET应用框架架构设计实践 概述
    给大家推荐几个国外IT技术论坛
    IIS 内部运行机制
    大型网站后台架构的Web Server与缓存
    CMD 获得当前目录命令
    html之marquee详解
    sharepoint 富文本编辑器
    C# 将数据导出到Execl汇总(C/S和B/S)
    更改应用程序池的密码 (Windows SharePoint Services)
  • 原文地址:https://www.cnblogs.com/icebutterfly/p/1653114.html
Copyright © 2020-2023  润新知