Ich versuche, Sql-Fehler abzufangen, wenn ich eine gespeicherte Prozedur auf einem verknüpften Server ausführe. Auf beiden Servern läuft SQL Server 2005.
Um das Problem zu beweisen, habe ich eine gespeicherte Prozedur auf dem verknüpften Server namens Raise error erstellt, die den folgenden Code ausführt:
RAISERROR('An error', 16, 1);
Wenn ich die gespeicherte Prozedur direkt auf dem verknüpften Server mit dem folgenden Code ausführe, erhalte ich eine Ergebnismenge mit 'An error', '16' wie erwartet (d.h. der Code tritt in den Catch-Block ein):
BEGIN TRY
EXEC [dbo].[RaiseError];
END TRY
BEGIN CATCH
DECLARE @ErrMsg nvarchar(4000), @ErrSeverity int;
SELECT @ErrMsg = ERROR_MESSAGE(), @ErrSeverity = ERROR_SEVERITY();
SELECT @ErrMsg, @ErrSeverity;
END CATCH
Wenn ich den folgenden Code auf meinem lokalen Server ausführe, um die gespeicherte Prozedur auf dem verknüpften Server auszuführen, gibt mir SSMS die Meldung 'Query completed with errors', Msg 50000, Level 16, State 1, Procedure RaiseError, Line 13 Ein Fehler'
BEGIN TRY
EXEC [Server].[Catalog].[dbo].RaiseError
END TRY
BEGIN CATCH
DECLARE @SPErrMsg nvarchar(4000), @SPErrSeverity int;
SELECT @SPErrMsg = ERROR_MESSAGE(), @SPErrSeverity = ERROR_SEVERITY();
SELECT @SPErrMsg, @SPErrSeverity;
END CATCH
Meine Frage ist, kann ich den Fehler abfangen, der erzeugt wird, wenn die verknüpfte Server gespeicherte Prozedur ausgeführt wird?
Vielen Dank im Voraus!