これを処理する最善の方法は、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>
お楽しみください
質問は何ですか? – Sklivvz
深刻な2または3レベルのネストされたストアドプロシージャでエラーが発生した場合、SQL Server 2005でtry/catchを処理するエラーを使用してこれを実現する方法を知りたい – HAdes