--===========================================================================-- -- TABLES temporelles / MS Cloud Summit 2017 / 2017-01-09 version 1.0 -- --===========================================================================-- -- Fred Brouard, SQLpro - http://sqlpro.developpez.com - SQLpro@SQLspot.com -- -- Arian papillon - http://www.datafly.fr/ - a.papillon@datafly.com -- --===========================================================================-- --▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄-- -- Exemple 5 : Purge de la table d'historique et ALTER TABLE -- --▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀-- USE DB_TEMPORAL GO SELECT _EMP_DH_DEBUT, _EMP_DH_FIN, * FROM dbo.T_EMPLOYE_EMP FOR SYSTEM_TIME ALL ORDER BY EMP_ID, _EMP_DH_DEBUT; GO ------------------------------------------------------------------------------- -- purge de l'historique pour les faits avant l'an 2000. ------------------------------------------------------------------------------- BEGIN TRY BEGIN TRANSACTION; -- place un verrou sur la table des employés SELECT TOP (0) _EMP_DH_DEBUT, _EMP_DH_FIN, * FROM dbo.T_EMPLOYE_HISTORIQUE_EMP WITH (TABLOCKX); -- place un verrou sur la table de l'historique des employés SELECT TOP (0) _EMP_DH_DEBUT, _EMP_DH_FIN, * FROM dbo.T_EMPLOYE_EMP WITH (TABLOCKX); -- débranchement du versionnement ALTER TABLE T_EMPLOYE_EMP SET (SYSTEM_VERSIONING = OFF); -- la purge (DELETE) doit s'effectuer dans une transactio à part => SQL dynamique ! EXEC ('DELETE FROM dbo.T_EMPLOYE_HISTORIQUE_EMP WHERE _EMP_DH_FIN < ''20000101'''); -- remise en place du versionnement ALTER TABLE T_EMPLOYE_EMP SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.T_EMPLOYE_HISTORIQUE_EMP)); -- validation COMMIT; -- gestion d'erreur END TRY BEGIN CATCH IF XACT_STATE() <> 0 ROLLBACK; THROW; END CATCH -- VÉRIFIONS... SELECT _EMP_DH_DEBUT, _EMP_DH_FIN, * FROM dbo.T_EMPLOYE_EMP FOR SYSTEM_TIME ALL ORDER BY EMP_ID, _EMP_DH_DEBUT; GO ------------------------------------------------------------------------------- -- Modification de la structure de la table... ------------------------------------------------------------------------------- -- on rajoute une colonne... ALTER TABLE dbo.T_EMPLOYE_EMP ADD EMP_NUMSECU CHAR(13); -- ça marche !