J'essaye d'attraper l'erreur SQL soulevée quand j'exécute une procédure stockée sur un serveur lié. Les deux serveurs sont en cours d'exécution SQL Server 2005.TRY CATCH avec le serveur lié dans SQL Server 2005 ne fonctionne pas
Pour prouver la question que j'ai créé une procédure stockée sur le serveur lié appelé Raise erreur qui exécute le code suivant:
RAISERROR('An error', 16, 1);
Si j'exécute la procédure stockée directement sur le serveur lié en utilisant le code suivant je reçois un jeu de résultats avec « une erreur », « 16 » comme prévu (par exemple le code entre dans le bloc catch):
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
Si je lance le code suivant sur mon serveur local pour exécuter la procédure stockée sur le serveur lié puis SSMS me donne le message 'Requête terminée avec des erreurs', .MSG 50000, Niveau 16, État 1, Procédure RaiseError, ligne 13 Une erreur »
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
Ma question est ce que je peux attraper l'erreur générée lorsque le Linked procédure stockée du serveur s'exécute?
Merci d'avance!
vrai. Article http://msdn.microsoft.com/en-us/library/ms191515.aspx explique cela. Ennuyeux comme vous devez être dans le rôle sysadmin ou les utilisateurs avec l'autorisation ALTER TRACE, et utilisez WITH LOG pour élever une erreur avec une gravité de 20 à 25. –