SET XACT_ABORT ON; DECLARE @maxRetry int ; SET @maxRetry = 5 DECLARE @lastError int RETRY_COMMAND: SET @lastError = 0 BEGIN TRY BEGIN TRANSACTION -- INSERT / UPDATE / DELETE -- (...) COMMIT TRAN END TRY BEGIN CATCH print ERREOR_MESSAGE() SET @lastError = ERROR_NUMBER() IF XACT_STATE() = -1 ROLLBACK TRAN; -- Ici si erreur de lock, alors recommence dans une seconde IF @lastError in(1222, 1207) and @maxRetry > 0 BEGIN WAITFOR delay '00:00:01' SET @maxRetry = @maxRetry - 1 GOTO RETRY_COMMAND; END END CATCH IF @lastError = 0 print 'SUCCES' ELSE print 'ECHEC'
-- Crée une table TMP sur le modèle de TABLE1 DECLARE @TMP_T1 TABLE(c1 type, c2 type) -- Crée une table tmp sur le modèle de TABLE2 DECLARE @TMP_T2 TABLE(c1 type, c2 type) -- insert avec trigger inline INSERT INTO TABLE1(t1_1, t1_2) OUTPUT inserted.t1_1, inserted.t1_2 INTO @TMP_T1(c1, c2) SELECT 'toto', 'titi' -- delete avec trigger inline DELETE TABLE2 OUTPUT deleted.t2_1, deleted.t2_2 INTO @TMP_T2(c1, c2) WHERE t2_1 = 'toto'