Der beste Weg, dies zu handhaben, ist die Verwendung von OUTPUT-Parametern und XML. Der folgende Beispielcode wird Ihnen und Ihnen zeigen . kann ändern, was Sie in der TopProcedure mit dem XML tun, um besser auf Ihre Antwort auf den Fehler zu behandeln
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
der erste Aufruf zu TopProcedure 25. der zweite zurückkehren wird eine XML-Block zurück, die wie folgt aussieht:
<root>
<a>
<ErrorMessage>Bad number set!</ErrorMessage>
<ErrorLine>6</ErrorLine>
<ErrorProcedure>SubProcedure</ErrorProcedure>
<ErrorSeverity>16</ErrorSeverity>
</a>
</root>
Genießen Sie
Was ist die Frage? – Sklivvz
Ich würde gerne wissen, wie dies mit der Fehlerbehandlung try/catch in SQL Server 2005 erreicht werden kann, wenn ein Fehler in einer gespeicherten Prozedur verschachtelte 2 oder 3 Ebenen tief auftritt – HAdes