Hvordan bruke SQL Server Temporal Table

Hvordan bruke SQL Server Temporal Table
Temporale tabeller, også kjent som systemversjonerte tabeller, er tabeller som lar deg spore og oppbevare en historie med dataene på en bestemt tabell. Ved hjelp av tidsmessige tabeller kan du spore historien til endringene som er gjort i dataene i en tabell.

Denne artikkelen vil legge et grunnlag for å lage, jobbe med og bruke temporale tabeller i SQL Server.

Systemversjonerte tabeller ble introdusert i ANSI SQL 2011 -standarden og har vært tilgjengelig som en funksjon i SQL Server 2016 og over.

I motsetning til en normal tabell som bare kan vise og jobbe med gjeldende data, lar de tidsmessige tabellene deg se og jobbe selv med tidligere slettede data. Som nevnt er dette mulig på grunn av evnen til en tidsmessig tabell til å holde oversikt over endringene som er gjort i dataene i en tabell.

Tabellen inneholder to nøkkelkolonner: sysstarttime og sysendtime. Disse to kolonnene brukes til å definere eksisterende og tidligere data for hver post i en tabell. Du kan bruke bestemte tidsintervaller for å se hvordan dataene i en tabell har endret seg.

Lag en tidsmessig tabell

Før du kan opprette en tidsmessig tabell, må den oppfylle følgende krav:

  1. En tidsmessig tabell må inneholde en primær nøkkelbegrensning definert.
  2. Den må inneholde to kolonner for å registrere start- og sluttdatoen. Disse kolonnene må være av datetime2 datatype. Kolonnene skal deklareres som genereres alltid som radstart/slutt.
  3. SQL Server antar at de to kolonnene er ikke-nullable. Derfor mislykkes Create Table -setningen hvis spørringen prøver å angi kolonner som er ugyldige.
  4. SQL Server Auto-Generates en historietabell ved hjelp av et lignende skjema som den tidsmessige tabellen.
  5. Du kan ikke bruke i stedet for triggere i et systemversjonert tabell.
  6. Historiebordet skal ikke inneholde noen begrensninger.
  7. Du kan ikke endre dataene i historietabellen.
  8. Uttalelser, for eksempel innsats og oppdatering, kan ikke referere til periodekolonnene.
  9. Historietabellen er opprettet som en radhistorisk tabell, og sidekomprimeringen brukes hvis aktuelt. Ellers blir tabellen ukomprimert.
  10. SQL Server vil automatisk generere en gruppert indeks for historietabellen.

Hvordan lage en tidsmessig tabell: T-SQL

La oss se på en enkel demonstrasjon av å lage en tidsmessig tabell. Tenk på eksemplet som er vist nedenfor:

Lag tabell dbo.my_temporal_table (
id int,
fname varchar (50),
E -post varchar (255),
Avdelingen varchar (50),
Begrensning PK Primærnøkkel (ID),
SysStartTime DateTime2 generert alltid som rad start ikke null,
SysendTime DateTime2 generert alltid som rad slutt ikke null,
periode for system_time (sysstarttime, sysendtime)) med (System_Versioning = ON);

Når vi har kjørt spørringen over, vil SQL -serveren opprette tabellen med det spesifiserte navnet.

I SQL Server Management Studio kan du se et systemversjonert tabell ved å utvide tabellalternativet i måldatabasen din:

Legg merke til at SQL -serveren automatisk genererer en historietabell med et lignende skjema som systemversjonertabellen. Vær imidlertid oppmerksom på kolonnene i historietabellen. Legg merke til at de ikke har noen begrensninger.

Tenk på bildet vist nedenfor:

Som du vil se, genererer SQL Server en historietabell under et navn etter et bestemt format. For å angi et tilpasset navn for historietabellen din, spesifiser det i CREATE TABLE -setningen som vist:

---
periode for system_time (sysstarttime, sysendtime)) med (System_Versioning = ON, History_table = mytemporal_tableHistory);
---

Deretter, hvis du utvider alternativet indekser for historietabellen, merker du at SQL Server automatisk genererte en gruppert indeks:

Ved hjelp av temporale tabeller

La oss teste funksjonaliteten til tidsmessige tabeller ved å sette inn noen få poster i tabellen. Tenk på eksemplet som er vist nedenfor:

Sett inn i my_temporal_table (id, fname, e -post, avdeling)
Verdier (1, 'John Davis', '[email protected] ',' front-end '),
(2, 'Ruby Raw', '[email protected] ',' Database '),
(3, 'Scott Turner', '[email protected] ',' full-stack '),
(4, 'Alice Jensen', '[email protected] ',' versjonskontroll '),
(5, 'Peter Green', '[email protected] ',' backend ');

Når vi har satt eksemplaredataene satt inn i tabellen, kan vi spørre dem om:

Velg * fra my_temporal_table;

Du bør få en utgang nær den som er vist nedenfor som

For å forstå hvordan systemversjonstabellen fungerer, la oss slette og oppdatere rader i tabellen:

Slett fra my_temporal_table hvor avdelingen = 'database';
Oppdater my_temporal_table set fname = 'John m' hvor id = 5;

Deretter spør dataene i hovedtabellen:

Velg * fra my_temporal_table;

Hvis du spør History Table, bør du se den gamle versjonen av dataene med riktige tidsstempler.

Konklusjon

Denne guiden dekket begrepet tidsmessig eller systemversjonert tabell i SQL Server. Ved hjelp av denne guiden vil du være i stand til å spore historien til dataene dine ved hjelp av SQL Server temporale tabeller. Vi håper du fant denne artikkelen nyttig. Sjekk ut flere Linux -hint -artikler for tips og opplæringsprogrammer.