zoukankan      html  css  js  c++  java
  • 存储过程中的错误处理

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

     

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

     

     

     

    [c-sharp] view plaincopy
    1. CREATE TABLE testTable  
    2. (  
    3.     id int IDENTITY(1,1),  
    4.     name nvarchar(20) NOT NULL,  
    5.     pass nvarchar(20)  
    6. )  
    7. CREATE PROCEDURE testTableInsert  
    8.     @name nvarchar(20),  
    9.     @pass nvarchar(20)  
    10. AS  
    11.     BEGIN TRY  
    12.         INSERT INTO testTable  
    13.         VALUES(@name,@pass)  
    14.     END TRY  
    15.     BEGIN CATCH  
    16.         PRINT @@error  
    17.         PRINT 'error'          
    18.     END CATCH  
    19.       
    20.     SELECT * FROM Test--(怎是存在的表)  
    21.       
    22.       
    23. EXEC testTableInsert null,'test'  

     

     

     

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

     

     

    [c-sharp] view plaincopy
    1. --下面演示了SQL错误处理的脆弱性     
    2.       
    3.   --测试的存储过程1     
    4.   create   proc   p1     
    5.   as     
    6.   print   12/0     
    7.   if   @@error<>0     
    8.   print   'error 1'     
    9.       
    10.   select   *   FROM SwcPage   
    11.   if   @@error<>0     
    12.   print   'error 2'     
    13.   go     
    14.       
    15.   --调用     
    16.   exec   p1     
    17.   go     
    18.       
    19.   --删除测试     
    20.   drop   proc   p1     
    21.       
    22.   /*--测试结果    
    23.      
    24.   服务器:   消息   8134,级别   16,状态   1,过程   p1,行   6    
    25.   遇到被零除错误。    
    26.   发生错误1    
    27.   服务器:   消息   208,级别   16,状态   1,过程   p1,行   10    
    28.   对象名   'newid'   无效。    
    29.      
    30.   --*/     

     

     

     

    [c-sharp] view plaincopy
    1. --下面演示了SQL错误处理的脆弱性     
    2.       
    3.   --演示2,存储过程嵌套调用中的错误     
    4.       
    5.   --测试的存储过程1     
    6.   create   proc   p1     
    7.   as     
    8.   print   12/0     
    9.   if   @@error<>0     
    10.   print   'error 1'     
    11.       
    12.   select   *   from   newid()     
    13.   if   @@error<>0     
    14.   print   'error 2'     
    15.   go     
    16.       
    17.   --测试的存储过程2     
    18.   create   proc   p2     
    19.   as     
    20.   exec   p1     
    21.       
    22.   if   @@error<>0     
    23.   print   'call sp1 error end'     
    24.   else     
    25.   print   'call sp1 normal end'     
    26.   go     
    27.       
    28.   --调用     
    29.   exec   p2     
    30.   go     
    31.       
    32.   --删除测试     
    33.   drop   proc   p1,p2     
    34.       
    35.   /*--测试结果    
    36.      
    37.   服务器:   消息   8134,级别   16,状态   1,过程   p1,行   8    
    38.   遇到被零除错误。    
    39.   发生错误1    
    40.   服务器:   消息   208,级别   16,状态   1,过程   p1,行   12    
    41.   对象名   'newid'   无效。    
    42.   调用   存储过程1   异常结束    
    43.   --*/

     

  • 相关阅读:
    oracle重命名数据库
    GridView分页的实现
    vb发post信息,非常简单,就一个函数
    第六周进度条
    软件工程作业
    进度条第五周
    四则运算设计03
    进度条03
    单元测试课堂作业
    个人作业02
  • 原文地址:https://www.cnblogs.com/mili3/p/3396185.html
Copyright © 2011-2022 走看看