Voici ma procédure dans SQL Server 2005Procédure reprise, même après l'erreur
PROCEDURE [dbo].[sp_ProjectBackup_Insert]
@prj_id bigint
AS
BEGIN
DECLARE @MSG varchar(200)
DECLARE @TranName varchar(200)
DECLARE @return_value int
-- 1. Starting the transaction
begin transaction @TranName
-- 2. Insert the records
SET IDENTITY_INSERT [PMS_BACKUP].[Common].[PROJECT] ON INSERT INTO [PMS_BACKUP].[Common].[PROJECT] ([PRJ_ID],[PRJ_NO1],[PRJ_NO2],[PRJ_NO3],[PRJ_DESC],[IS_TASKFORCE],[DATE_CREATED],[IS_APPROVED],[DATE_APPROVED],[IS_HANDEDOVER],[DATE_HANDEDOVER],[DATE_START],[DATE_FINISH],[YEAR_OF_ORDER],[CLIENT_DETAILS],[SCOPE_OF_WORK],[IS_PROPOSAL],[PRJ_MANAGER],[PRJ_NAME],[MANAGER_VALDEL],[MANAGER_CLIENT],[DEPT_ID],[locationid],[cut_off_date]) SELECT * FROM [pms].[Common].[PROJECT] T WHERE T.PRJ_ID = (@prj_id) SET IDENTITY_INSERT [PMS_BACKUP].[Common].[PROJECT] OFF IF @@ERROR <> 0 GOTO HANDLE_ERROR
SET IDENTITY_INSERT [PMS_BACKUP].[Common].[DEPARTMENT_CAP] ON INSERT INTO [PMS_BACKUP].[Common].[DEPARTMENT_CAP] ([CAP_ID],[DEPT_ID],[PRJ_ID],[IS_CAPPED],[DATE_CAPPED],[CAPPED_BY],[CAP_APPROVED_BY],[STATUS],[UNCAPPED_BY],[DATE_UNCAPPED],[DESCRIPTION],[UNCAP_APPROVED_BY],[LOCATIONID]) SELECT * FROM [pms].[Common].[DEPARTMENT_CAP] T WHERE T.PRJ_ID = (@prj_id) SET IDENTITY_INSERT [PMS_BACKUP].[Common].[DEPARTMENT_CAP] OFF IF @@ERROR <> 0 GOTO HANDLE_ERROR
INSERT INTO [PMS_BACKUP].[Common].[DOC_REG] SELECT * FROM [pms].[Common].[DOC_REG] T WHERE T.PRJ_ID = (@prj_id) IF @@ERROR <> 0 GOTO HANDLE_ERROR
-- 3. Commit transaction
COMMIT TRANSACTION @TranName;
return @@trancount;
HANDLE_ERROR:
rollback transaction @TranName
RETURN 1
END
et la question est, même si la première requête d'insertion échoue, son pas arrêter le traitement et de reprendre le reste des requêtes d'insertion. La valeur de retour, je reçois est 1, mais dans la fenêtre de résultats, je peux voir le journal comme celui-ci
(0 row (s) affected) Msg 2627, niveau 14, État 1, Procédure sp_ProjectBackup_Insert, ligne 35 Violation de la contrainte PRIMARY KEY 'PK_PROJECT'. Impossible d'insérer la clé en double dans l'objet 'Common.PROJECT'. L'instruction a été interrompue.
(0 ligne (s) affecté)
(0 ligne (s) affecté)
Je pensais que le return 1
fera la sortie du code de gestion des erreurs, mais ne se produit pas. Un problème avec ma gestion des erreurs?
Quel système de base de données utilisez-vous (SQL, Oracle, etc.) –
SQL Server 2005. Ajouté à la question maintenant. – Antoops