1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| USE BaseDeDonnees
GO
SET NOCOUNT ON
IF EXISTS (SELECT * FROM tempdb..sysobjects WHERE id=OBJECT_ID('tempdb..#tmpErrors')) DROP TABLE #tmpErrors
GO
CREATE TABLE #tmpErrors (Error int)
GO
SET XACT_ABORT OFF
GO
SET TRANSACTION ISOLATION LEVEL serializable
GO
-- ici j'ai essayé de mettre : IF EXISTS (select * from client where nom='A')
BEGIN TRANSACTION
GO
-- requete 1 : creation d''une table temporaire
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].TAMPON_table') AND type in (N'U')) DROP TABLE TAMPON_table
GO
CREATE TABLE TAMPON_table
( OBJET nvarchar(100),
ACTION default 0)
GO
IF @@ERROR<>0 AND @@TRANCOUNT>0 BEGIN ROLLBACK TRANSACTION
print ' !! ECHEC A LA CREATION DE LA TABLE TAMPON_Table' END
GO
IF @@TRANCOUNT=0 BEGIN INSERT INTO #tmpErrors (Error) SELECT 1 BEGIN TRANSACTION END
GO
-- requete 2 : creation d''une autre table temporaire
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].TAMPON_table2') AND type in (N'U')) DROP TABLE TAMPON_table2
GO
CREATE TABLE TAMPON_table2
( OBJET nvarchar(100),
ACTION default 0)
GO
IF @@ERROR<>0 AND @@TRANCOUNT>0 BEGIN ROLLBACK TRANSACTION
print ' !! ECHEC A LA CREATION DE LA TABLE TAMPON_Table2' END
GO
IF @@TRANCOUNT=0 BEGIN INSERT INTO #tmpErrors (Error) SELECT 1 BEGIN TRANSACTION END
GO
-- requete 3 à N : je ne les mentionne pas mais ce sont divers requetes de selection, d'update, d'insert etc ... toujours avec le même principe de gestion des erreurs
------------------------------------------------------------------------------------------------------------------
------------------------------------------------------------ GESTION DES ERREURS -------------------------------
------------------------------------------------------------------------------------------------------------------
IF EXISTS (SELECT * FROM #tmpErrors) ROLLBACK TRANSACTION
GO
IF @@TRANCOUNT>0 BEGIN
print ''
PRINT ' >>> LA MIS À JOUR A ETE REALISEE AVEC SUCCES <<<'
COMMIT TRANSACTION
END
ELSE PRINT '
!! ATTENTION : La tentative de mise à jour sur la base de donnees a échouée
>> AUCUNE MODIFICATION N''EST INTERVENUE SUR LA BASE << '
GO
DROP TABLE #tmpErrors
GO
SET NOCOUNT OFF |