peiyuan1030 发表于 2015-7-3 11:47:14

SQL SERVER 2005也来try catch和throw?

  

ALTER PROCEDURE .
    @from varchar(50),
    @to varchar(50),
    @num int
AS

BEGIN TRY
    BEGIN TRAN;
    update vc set balance = balance - @num where = @from;
    update vc set balance = balance + @num where = @to;
COMMIT TRAN;
END TRY
BEGIN CATCH
    ROLLBACK TRAN
    EXEC PE_THROW;
END CATCH

自定义的pe_throw存储过程如下:


set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
/*****************************************************************
-- 过程名:PE_THROW
-- 输入:
-- 输出:
--         抛出异常
-- 功能描述: 接收调用程序的异常并抛给上一级程序. 注意每个数据库都应包含该过程.
-- 调用模块: 所有包含事务控制的过程
-- 操作表
-- 作者:
-- 日期: 2007-01-30
-- 修改:
-- 日期:
-- 版本
****************************************************************/
ALTER PROCEDURE .

AS

BEGIN

    SET NOCOUNT ON;

   DECLARE

      @ErrorMessage    NVARCHAR(4000),

      @ErrorNumber   INT,

      @ErrorSeverity   INT,

      @ErrorState      INT,

      @ErrorLine       INT,

      @ErrorProcedureNVARCHAR(200);

   SELECT

      @ErrorNumber = ERROR_NUMBER(),

      @ErrorSeverity = ERROR_SEVERITY(),

      @ErrorState = ERROR_STATE(),

      @ErrorLine = ERROR_LINE(),

      @ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-');

       SELECT @ErrorMessage = N'Error %d, Level %d, State %d, Procedure %s, Line %d, ' + 'Message: '+ ERROR_MESSAGE();

    RAISERROR

      (

      @ErrorMessage,

      @ErrorSeverity,

      1,               

      @ErrorNumber,

      @ErrorSeverity,

      @ErrorState,

      @ErrorProcedure,

      @ErrorLine

      );

END
页: [1]
查看完整版本: SQL SERVER 2005也来try catch和throw?