-1
如何在递归过程中处理错误?我正在使用SQL Server 2012.递归过程错误处理
CREATE PROCEDURE [dbo].[TEST]
@i INT
AS
BEGIN
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRANSACTION [T]
BEGIN TRY
PRINT @i
IF @i = 10
BEGIN
COMMIT TRANSACTION [T]
RETURN;
END
ELSE
BEGIN
SET @i = @i + 1;
EXEC DBO.TEST @i;
END
COMMIT TRANSACTION [T]
END TRY
BEGIN CATCH
IF @@TRANCOUNT>0
ROLLBACK TRANSACTION [T]
SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_MESSAGE() AS ErrorMessage;
END CATCH
END
这只是一个示例,因为我没有自动发布原始代码。
那会是什么错误?你可以发布存储过程,所以我们可以帮助你。 – JBond
我很迷惑提交的位置,以及SQL是否有变量来检查递归级别。 –
这是纯粹的,纯粹的邪恶。在最好的日子里,T-SQL是一种可怕的编程语言;使用它来实现递归和混合,并与事务处理有关。在你发布的例子中,'@ i'将指示递归的级别,应该是有帮助的。如果你没有这样的变量,你可以使用存储在临时表中的行。 T-SQL无法访问类似堆栈跟踪的东西(尽管我很想在这方面证明是错误的)。但是,您可以使用事件探查器跟踪或扩展事件跟踪过程外的调用。 –