이 문제를 해결하는 가장 좋은 방법은 OUTPUT 매개 변수와 XML을 사용하는 것입니다. . 당신은 더 나은 오류로 응답을 처리하기 위해 TopProcedure에서 XML로 무엇을 수정할 수 있습니다
이
USE tempdb
go
CREATE PROCEDURE SubProcedure @RandomNumber int, @XMLErrors XML OUTPUT
AS
BEGIN
BEGIN TRY
IF @RandomNumber > 50
RaisError('Bad number set!',16,1)
else
select @RandomNumber
END TRY
BEGIN CATCH
SET @XMLErrors = (SELECT * FROM (SELECT ERROR_MESSAGE() ErrorMessage,
ERROR_LINE() ErrorLine, ERROR_PROCEDURE() ErrorProcedure,
ERROR_SEVERITY() ErrorSeverity) a FOR XML AUTO, ELEMENTS, ROOT('root'))
END CATCH
END
go
CREATE PROCEDURE TopProcedure @RandomNumber int
AS
BEGIN
declare @XMLErrors XML
exec SubProcedure @RandomNumber, @XMLErrors OUTPUT
IF @XMLErrors IS NOT NULL
select @XMLErrors
END
go
exec TopProcedure 25
go
exec TopProcedure 55
go
DROP PROCEDURE TopProcedure
GO
DROP PROCEDURE SubProcedure
GO
TopProcedure에 대한 초기 호출 (25)를 반환합니다 두 번째는이처럼 보이는 XML 블록을 반환합니다
<root>
<a>
<ErrorMessage>Bad number set!</ErrorMessage>
<ErrorLine>6</ErrorLine>
<ErrorProcedure>SubProcedure</ErrorProcedure>
<ErrorSeverity>16</ErrorSeverity>
</a>
</root>
Enjoy
무엇이 문제입니까? – Sklivvz
중첩 된 2 또는 3 수준의 중첩 된 저장 프로 시저에서 오류가 발생하면 SQL Server 2005에서 try/catch 처리 오류를 사용하여이 작업을 수행하는 방법을 알고 싶습니다. – HAdes