Quelqu'un a-t-il essayé des tables temporelles prépopulées avec de vieilles données d'histoire? Avant de décider d'utiliser des tables temporelles, nous devons pouvoir importer notre ancienne histoire.
Oui, vous pouvez importer une vieille histoire dans les tables d'histoire. Voici un exemple rapide qui montre comment faire cela - vous devez désactiver temporairement la version du système.
CREATE TABLE dbo.TemporalExampleHistory
(
TemporalID int NOT NULL,
UserName sysname,
ValidFrom datetime2 NOT NULL,
ValidTo datetime2 NOT NULL
);
GO
CREATE TABLE dbo.TemporalExample
(
TemporalID int PRIMARY KEY,
UserName sysname,
ValidFrom datetime2 GENERATED ALWAYS AS ROW START NOT NULL,
ValidTo datetime2 GENERATED ALWAYS AS ROW END NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH
(
SYSTEM_VERSIONING = ON
(
HISTORY_TABLE = dbo.TemporalExampleHistory
)
);
Maintenant, insérez quelques données:
INSERT dbo.TemporalExample(TemporalID, UserName)
VALUES(1,N'Bob'),(2,N'Frank');
-- update a row to make some history:
UPDATE dbo.TemporalExample
SET UserName = N'Frankie'
WHERE TemporalID = 2;
Valider Il y a une ligne de la version de la version système dans la table d'histoire:
SELECT * FROM dbo.TemporalExampleHistory;
Maintenant, pour insérer des rangées dans l'historique. Exécuter ces étapes une à la fois; L'analyseur empêchera l'insert si ceux-ci sont tous dans un seul lot.
BEGIN TRANSACTION; -- may want SERIALIZABLE here
ALTER TABLE dbo.TemporalExample SET (SYSTEM_VERSIONING = OFF);
INSERT dbo.TemporalExampleHistory(TemporalID, UserName, ValidFrom, ValidTo)
SELECT TOP (1) TemporalID, N'Little Frankie', '19000101', ValidFrom
FROM dbo.TemporalExampleHistory
WHERE TemporalID = 2
ORDER BY ValidFrom;
ALTER TABLE dbo.TemporalExample SET
(
SYSTEM_VERSIONING = ON
(
HISTORY_TABLE = dbo.TemporalExampleHistory,
DATA_CONSISTENCY_CHECK = ON
)
);
COMMIT TRANSACTION;
Maintenant, validez-vous maintenant deux rangées Verseed d'ID = 2 dans la table d'histoire:
SELECT * FROM dbo.TemporalExampleHistory;
Grande question!
Pour copier les données de vos tables de journal actuels, vous pouvez écrire un script simple pour peupler la table Histoire. N'oubliez pas que vous aurez temporal et historique Tables créées, assurez-vous donc d'insérer dans le bon. En supposant que votre table de journaux actuelle conserve une trace de "Insérer", "Mettre à jour" et "Supprimer", vous devez écrire un script qui pourrait insérer comme:
Insérer - Insérez toutes les commandes "Insérer" de la table du journal actuel. Démarrage défini sur la table actuelle [LOGDT], la minuterie est définie sur la valeur max (9999-12-31)
Mise à jour - Etant donné que l'instruction de mise à jour insère l'ancienne ligne de la table d'historique, votre script devra trouver toutes les lignes que votre relevé de mise à jour est en train de mettre à jour (ceux-ci seront "Insérer" ou "Mettre à jour" les commandes) et entrez ces lignes. Starttime Soyez [logdt], la durée de gamme est définie sur Max Value (9999-12-31)
Supprimer - Même chose que la mise à jour, vous devrez trouver l'ancienne ligne que cette déclaration a réellement supprimé. Mintérieur sera [logdt] de Supprimer la commande et la démarrage serait [logdt] de la mise à jour précédente ou d'insérer cette instruction supprimée
Je n'écris pas un script car il change pour tous les cas d'utilisation, mais j'espère que cela vous donne une idée de ce que vous pouvez faire pour importer de vieux tables de journaux dans la table d'histoire.