OK, je ne suis pas si expérimenté avec la gestion des erreurs SQL 2005 et suis apprendre mon chemin autour des instructions try/catch.SQL 2005 try/catch bloc n'atteint jamais 'attraper' despte faux tests de données
J'ai écrit la procédure ci-dessous mais peu importe ce que je lui passe, il n'y a jamais de données dans ma table ErrorLog. J'ai passé toutes les valeurs INT , toutes les valeurs datetime, ou les chaînes de données qui ne sont pas dans le DB et obtenir 0 lignes effectuées avec rien signalé dans ErrorLog. C'est comme si l'instruction CATCH n'est jamais atteinte (pour ce que ça vaut, j'ai aussi essayé de commenter la validation en haut).
Des idées de ce que je fais mal? Merci.
ALTER PROCEDURE [dbo].[aspnet_Membership_UpdateLastActivityDate]
@UserId nvarchar(256),
@UserName nvarchar(256),
@LastActivityDate datetime,
@ApplicationName nvarchar(256)
AS
DECLARE @Today DATETIME
DECLARE @MSG VARCHAR(255)
DECLARE @Severity INT
DECLARE @ErrorCode INT
BEGIN
SET XACT_ABORT ON -- (I have also tried it without XACT_ABORT. No difference)
BEGIN TRY
SET @ErrorCode = 0
SELECT @Today = GetDate()
IF (@UserId IS NULL)
RETURN(1)
IF (@UserName IS NULL)
RETURN(1)
IF (@LastActivityDate IS NULL)
RETURN(1)
BEGIN TRAN
UPDATE dbo.aspnet_Users WITH (ROWLOCK)
SET LastActivityDate = @LastActivityDate
FROM dbo.aspnet_Users u
INNER JOIN dbo.aspnet_Applications a
ON u.ApplicationId = a.ApplicationId
WHERE u.UserName = @UserName
AND u.UserId = @UserId
AND a.ApplicationName = @ApplicationName
COMMIT TRAN
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN
SET @ErrorCode = Error_Number()
SET @Severity = Error_Severity()
SET @MSG = 'An error was thrown: '
+ 'Error(' + @ErrorCode + '):' + ERROR_MESSAGE()
+ ' Severity = ' + ERROR_SEVERITY()
+ ' State = ' + ERROR_STATE()
+ ' Procedure = ' + ERROR_PROCEDURE()
+ ' Line Number = ' + ERROR_LINE()
INSERT INTO [dbo].[ErrorLog]([errornum], [errortype], [errormsg],[errorsource], [errordate])
VALUES (@ErrorCode, 'E', @MSG, Error_Procedure(), @Today)
RAISERROR(@MSG, @Severity, 2)
END CATCH
END
RETURN @ErrorCode
Merci, Code Sherpa, pour le choix ma réponse comme "la réponse". –