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
| SELECT FA.ColonnesDeLaClePrimaire
INTO dbo.FLAGS_AUTOMATE_FLUSH
FROM dbo.FLAGS_AUTOMATE AS FA
INNER JOIN dbo.RESULTATS_AUTOMATE RA
ON RA.RESULTAT_ID = REF_ID
WHERE AUTMANAGER_STATUT = 'M'
AND CDE4 IS NULL
GO
ALTER TABLE dbo.FLAGS_AUTOMATE_FLUSH
ADD CONSTRAINT PK_FLAGS_AUTOMATE_FLUSH PRIMARY KEY (ColonnesDeLaClePrimaire)
GO
DECLARE @dt datetime
WHILE EXISTS
(
SELECT *
FROM dbo.FLAGS_AUTOMATE_FLUSH
)
BEGIN;
SET @dt = GETDATE();
BEGIN TRY;
BEGIN TRANSACTION;
WITH
CTE AS
(
SELECT TOP (5000) ColonnesDeLaClePrimaire
FROM dbo.FLAGS_AUTOMATE_FLUSH
ORDER BY ColonnesDeLaClePrimaire
)
DELETE FROM dbo.FLAGS_AUTOMATE
FROM dbo.FLAGS_AUTOMATE AS FA
INNER JOIN CTE AS C
ON FA.ColonnesDeLaClePrimaire = C.ColonnesDeLaClePrimaire;
WITH
CTE AS
(
SELECT TOP (5000) ColonnesDeLaClePrimaire
FROM dbo.FLAGS_AUTOMATE_FLUSH
ORDER BY ColonnesDeLaClePrimaire
)
DELETE FROM dbo.FLAGS_AUTOMATE_FLUSH
FROM dbo.dbo.FLAGS_AUTOMATE_FLUSH AS FAF
INNER JOIN CTE AS C
ON C.ColonnesDeLaClePrimaire = FAF.ColonnesDeLaClePrimaire;
COMMIT TRANSACTION;
PRINT 'Deleted 5000 rows in ' + DATEDIFF(millisecond, @dt, GETDATE());
END TRY;
BEGIN CATCH;
-- Capture des détails de l'erreur
DECLARE @err_msg nvarchar(2048) = ERROR_MESSAGE()
, @err_svt int = ERROR_SEVERITY()
, @err_stt int = ERROR_STATE()
, @err_num int = ERROR_NUMBER();
-- Annulation de la transaction, si elle est toujours active
IF XACT_STATE() <> 0
BEGIN;
ROLLBACK TRANSACTION;
END;
-- Levée de l'exception
RAISERROR(@err_msg, @err_svt, @err_stt);
-- Si vous êtes sous SQL Server 2012, ou suivants, vous pouvez aussi écrire :
-- THROW @err_num, @err_msg, @err_stt;
END CATCH;
END; |
Partager