Dela via


Konsekvenskontroller för temporalt tabellsystem

gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Med temporala tabeller utför systemet flera konsekvenskontroller för att säkerställa att schemat uppfyller kraven för tidsmässiga och att data är konsekventa och förblir konsekventa. Dessutom är temporala kontroller tillgängliga i DBCC CHECKCONSTRAINTS-instruktionen.

Systemkonsekvenskontroller

Innan SYSTEM_VERSIONING anges till ONutförs en uppsättning kontroller i historiktabellen och den aktuella tabellen. Dessa kontroller grupperas i schemakontroller och datakontroller (om historiktabellen inte är tom). Dessutom utför systemet även en körningskonsekvenskontroll.

Schemakontroll

När du skapar eller ändrar en tabell för att bli en temporal tabell verifierar systemet att kraven uppfylls:

  1. Namnen och antalet kolumner är desamma i både den aktuella tabellen och historiktabellen.

  2. Datatyperna matchar för varje kolumn mellan den aktuella tabellen och historiktabellen.

  3. Periodkolumnerna är inställda på NOT NULL.

  4. Den aktuella tabellen har en primärnyckelbegränsning och historiktabellen har ingen primärnyckelbegränsning.

  5. Inga IDENTITY kolumner definieras i historiktabellen.

  6. Inga utlösare definieras i historiktabellen.

  7. Inga främmande nycklar definieras i historiktabellen.

  8. Inga tabell- eller kolumnbegränsningar definieras i historiktabellen. Standardkolumnvärden i historiktabellen tillåts dock.

  9. Historiktabellen placeras inte i en skrivskyddad filgrupp.

  10. Historiktabellen är inte konfigurerad för ändringsspårning eller insamling av ändringsdata.

Kontroll av datakonsekvens

Innan SYSTEM_VERSIONING anges till ON och som en del av en DML-åtgärd (datamanipuleringsspråk) utför systemet följande kontroll: ValidTo >= ValidFrom

När du skapar en länk till en befintlig historiktabell kan du välja att utföra en datakonsekvenskontroll. Den här datakonsekvenskontrollen säkerställer att befintliga poster inte överlappar varandra och att temporala krav uppfylls för varje enskild post. Standardinställningen är att utföra datakonsekvenskontrollen. Du bör kontrollera datakonsekvensen när data mellan de aktuella tabellerna och historiktabellerna kanske inte är synkroniserade. Till exempel när du införlivar en befintlig historiktabell som fylls med historikdata.

Varning

Manuella ändringar av systemklockan gör att systemet oväntat misslyckas eftersom konsekvenskontrollerna för körningsdata för att förhindra överlappningsvillkor (dvs. att sluttiden för en post inte är mindre än starttiden) misslyckas.

Använd DBCC CHECKCONSTRAINTS

Kommandot DBCC CHECKCONSTRAINTS innehåller kontroller av temporal datakonsekvens. Mer information finns i DBCC CHECKCONSTRAINTS.