SQL 2000/2005 中Transaction的使用

最近需要在 DB Procedure中使用事务(Transaction)。顺便做个记录和例子。

要兼容 SQL 2K 与 SQL 2005,所以不能使用 Try  ... Catch ..(Only For SQL2005)

没有办法,只能用 IF @@ERROR <> 0 捕捉错误了。

简单说下 SQL错误 和 @@ERROR:

通过执行Transact-SQL而产生的错误可分为两种:致命错误(fatal error)和非致命错误(non-fatal error)。在Transact-SQL中只可以捕捉非致命错误(如键值冲突),而无法捕捉致命错误(如语法错误)。

在Transact-SQL中可以通过系统变量@@ERROR判断最近执行的一条语句是否成功执行。如果发生了错误,@@Error的值大于0,否则值为0。

举例如下:

 

  
  
  
  
  1.  
  2. CREATE PROCEDURE Tran_Procedure  
  3. AS 
  4. Begin 
  5.     BEGIN TRANSACTION 
  6.         --语句1  
  7.         UPDATE C SET detail ='step10' WHERE c.id <= 3  
  8.             IF @@ERROR <> 0  
  9.                 BEGIN 
  10.                     ROLLBACK TRANSACTION 
  11.                     PRINT '语句1 发生错误' 
  12.                     PRINT '回滚且立即退出Procedure ' 
  13.                     RETURN        
  14.                 END 
  15.         --语句2             
  16.         SELECT * INTO #tempB FROM dbo.B  
  17.             IF @@ERROR <> 0  
  18.                 BEGIN 
  19.                     ROLLBACK TRANSACTION 
  20.                     PRINT '语句2 发生错误' 
  21.                     PRINT '回滚且立即退出Procedure ' 
  22.                     RETURN 
  23.                 END 
  24.         --语句3  
  25.         DROP TABLE #tempC  
  26.             IF @@ERROR <> 0  
  27.                 BEGIN 
  28.                     ROLLBACK TRANSACTION 
  29.                     PRINT '语句3 发生错误' 
  30.                     PRINT '回滚且立即退出Procedure ' 
  31.                     RETURN 
  32.                 END 
  33.         --语句4  
  34.         UPDATE C SET detail ='step2' WHERE c.id >1000  
  35.             IF @@ERROR <> 0  
  36.                 BEGIN 
  37.                     ROLLBACK TRANSACTION 
  38.                     PRINT '语句4 发生错误' 
  39.                     PRINT '回滚且立即退出Procedure ' 
  40.                     RETURN 
  41.                 END 
  42.         --语句5  
  43.         SELECT * FROM dbo.B  
  44.         PRINT '语句5执行了' 
  45.         --提交事务  
  46.         COMMIT TRANSACTION 
  47.         PRINT '事务已经提交' 
  48.         PRINT 'Procedure 执行完成' 
  49. END 

 

你可能感兴趣的:(数据库,事务,职场,transaction,休闲)