具有多个事务的过程如何将错误消息设置为输出参数

时间:2015-08-28 20:41:44

标签: sql-server sql-server-2008 tsql

在Sql Server 2008 R2中,我正在创建一个包含多个事务的过程。 Try..Catch Block用于每个事务。我使用输出参数来捕获错误代码和消息,因为它将被主程序捕获。但是当出现错误时,输出参数设置为错误消息和代码是不正确的,这里有什么问题?

create procedure xxx (@P_Return_Status  VARCHAR(1) OUTPUT, @P_Error_Code INT OUTPUT,)
AS 
BEGIN
  BEGIN TRY
    BEGIN TRANSACTION TR1
    .....
    COMMIT TRANSACTIOn TR1
  END TRY
  BEGIN CATCH
    IF (@@TRANCOUNT > 0)
    BEGIN
    ROLLBACK TRANSACTION TR1
    END             
    Set @P_Error_Code = Error_Number();
    Set @P_Error_Messages = LEFT(ERROR_MESSAGE (), 2000)
  END CATCH

  BEGIN TRY
    BEGIN TRANSACTION TR2
    .....
    COMMIT TRANSACTIOn TR2
  END TRY
  BEGIN CATCH
    IF (@@TRANCOUNT > 0)
    BEGIN
    ROLLBACK TRANSACTION TR2
    END             
    Set @P_Error_Code = Error_Number();
    Set @P_Error_Messages = LEFT(ERROR_MESSAGE (), 2000)
  END CATCH
END
GO

任何帮助都会非常感激!

1 个答案:

答案 0 :(得分:1)

我只是没有看到将两个事务放在这个过程中的重点,只需将所有语句放在一个事务中并提交或回滚它。

如果它确实需要在单独的事务中放置这两个尝试...捕获两个单独的过程并从另一个sp的try块调用一个sp。

{{1}}