Con questa procedura è possibile intercettare un particolare errore (in questo caso un Deadlock), e rieseguire la procedura richiesta, per un determinato numero di volte (per evitare un loop)
DECLARE @RetryCounter INT
SET @RetryCounter = 1
RETRY: BEGIN TRANSACTION
BEGIN TRY
UPDATE Customer SET LastName = 'John' WHERE CustomerId=111
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT 'Rollback Transaction'
ROLLBACK TRANSACTION
DECLARE @DoRetry bit; DECLARE @ErrorMessage varchar(500)
SET @doRetry = 0;
SET @ErrorMessage = ERROR_MESSAGE()
IF ERROR_NUMBER() = 1205 BEGIN
SET @doRetry = 1; END
IF @DoRetry = 1
BEGIN
SET @RetryCounter = @RetryCounter + 1 IF (@RetryCounter > 3) BEGIN
RAISERROR(@ErrorMessage, 18, 1) END
ELSE
BEGIN
WAITFOR DELAY '00:00:00.05' GOTO RETRY END
END
ELSE
BEGIN
RAISERROR(@ErrorMessage, 18, 1)
END
END CATCH
Nessun commento:
Posta un commento