none
Tables temporelles RRS feed

  • Question

  • Bonjour,

    Nous débutons avec la notion de tables temporelles.

    Si j'ai une base de données avec 10 colonnes, est-il possible que l'historique ne se déclenche qu'en cas de modification de deux de ces 10 colonnes ?

    Si oui, comment faire ?

    Merci d'avance.

    BàV.

    Damien.

    mercredi 29 août 2018 12:53

Réponses

  • Ne craignez pas l'explosion du volume pour les tables temporelles. En effet, la table temporelle ne stocke que le delta entre la ligne vivante et l'archive. il s'agit plus d'un mode compressé de manière automatique et transparent...

    A +

    • Marqué comme réponse Yout50 jeudi 24 janvier 2019 19:02
    jeudi 24 janvier 2019 16:48

Toutes les réponses

  • Bonjour,

    De quel historique s'agit-il ?

    mardi 4 septembre 2018 20:40
  • Bonjour,

    Lors de l'insertion dans une table temporelle, les données d'origine sont copiées dans la table historique.

    Je voudrais que cette copie ne se fasse que si certaines colonnes changent et pas toute.

    Merci ! 

    Damien.

    mercredi 5 septembre 2018 07:00
  • Bonjour

    Non, les tables temporelles ont la même structure que la table d'origine, avec un stockage de type Clustered ColumnStore index il me semble. 

    Pourquoi ne pas "vouloir" archiver sur la modification de seulement 2 colonnes ?
    Si malgré tout vous souhaitez exactement ce fonctionnement, un trigger after update avec un test if update(col) devrait suffire.

    Christophe


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    vendredi 12 octobre 2018 13:50
  • Bonjour,

    Merci pour votre réponse. En fait, je crains une explosion du volume utilisé par SQL pour stocker les données.

    Pour le reste, si ce point ne pose pas de problème, autant conserver l'historique de tout.

    Merci pour votre retour.

    Damien

    lundi 15 octobre 2018 13:42
  • Ne craignez pas l'explosion du volume pour les tables temporelles. En effet, la table temporelle ne stocke que le delta entre la ligne vivante et l'archive. il s'agit plus d'un mode compressé de manière automatique et transparent...

    A +

    • Marqué comme réponse Yout50 jeudi 24 janvier 2019 19:02
    jeudi 24 janvier 2019 16:48
  • Bonsoir,

    Merci pour votre réponse.

    Bien à vous.

    Damien

    jeudi 24 janvier 2019 19:02
  • Salut Fred

    Je ne vois pas pourquoi tu dis qu'il ne stocke que le delta. C'est une copie complète de l'ancienne version de l'enregistrement qui est stockée dans la table temporelle.

    Un update d'une seul colonne va recopier l'intégralité de l'enreg dans l'historique

    UPDATE dbo.Employee
    SET DepartmentName = 'Tool Design'
    WHERE BusinessEntityID = 5
    GO

    Query plan :

    <Object Database="[TemporalDataDB]" Schema="[dbo]" Table="[EmployeeHistory]"
                Index="[ix_EmployeeHistory]" IndexKind="Clustered" Storage="RowStore" />
                        <SetPredicate>
                          <ScalarOperator
           ScalarString="[TemporalDataDB].[dbo].[EmployeeHistory].[BusinessEntityID] = [TemporalDataDB].[dbo].[Employee].[BusinessEntityID],
                         [TemporalDataDB].[dbo].[EmployeeHistory].[FirstName] = [TemporalDataDB].[dbo].[Employee].[FirstName],
             [TemporalDataDB].[dbo].[EmployeeHistory].[LastName] = [TemporalDataDB].[dbo].[Employee].[LastName],
             [TemporalDataDB].[dbo].[EmployeeHistory].[DepartmentName] = [DepartmentName_OLD],
             [TemporalDataDB].[dbo].[EmployeeHistory].[StartDate] = [StartDate_OLD],
             [TemporalDataDB].[dbo].[EmployeeHistory].[EndDate] = RaiseIfNullInsert([Expr1009])">

    Mais bon, faut croire que la réponse que j'avais donnée n'était pas suffisante pour m'sieur Yout50


    Christophe LAPORTE - Independent Consultant & Trainer - SQL Server MVP-MCM

    jeudi 24 janvier 2019 20:36