在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
任何帮助都会非常感激!
答案 0 :(得分:1)
我只是没有看到将两个事务放在这个过程中的重点,只需将所有语句放在一个事务中并提交或回滚它。
如果它确实需要在单独的事务中放置这两个尝试...捕获两个单独的过程并从另一个sp的try块调用一个sp。
{{1}}