Je souhaite savoir comment créer une table avec version système, lorsque je souhaite créer une nouvelle table temporelle dans SQL Server 2016?Tables temporaires SQL Server en 2016
Répondre
De here:
Afin de rendre une table une table système versionné, il a besoin de la suivante:
- Une clé primaire
- L'option tableau SYSTEM_VERSIONING à régler à ON
- Deux colonnes DATETIME2() non nulles représentant le début et la fin de la période de validité de la ligne
- La colonne de départ doit être marqué avec l'option GÉNÉRÉ TOUJOURS EN LIGNE DÉBUT
- La colonne de fin doit être marquée avec l'option GÉNÉRÉ TOUJOURS EN LIGNE FIN
- Désignation des colonnes d'époque: PÉRIODE DE system_time (,)
- Une table liée à l'histoire (qui SQL Server peut créer pour vous) de tenir les états passés des lignes modifiées
vous c une référence à ces deux liens:
http://sqlwithmanoj.com/2015/06/15/temporal-data-support-in-sql-server-2016-part-1/
USE [TestManDB]
GO
CREATE TABLE dbo.Department
(
DepartmentID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
DepartmentName varchar(50) NOT NULL,
ManagerID int NULL,
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); -- No History table name given here
GO
crédits au lien ci-dessus pour le code source.
Veuillez vous référer aux exemples de cas au how to create temporal tables in SQL Server selon chaque scénario.
La forme la plus simple est de créer une nouvelle table SQL comme la table temporelle comme suit
create table sampleTable (
IdColumn int identity(1,1) not null primary key clustered,
Code varchar(5),
CurrentValue varchar(100),
SysStartTime datetime2 Generated Always as Row Start Not Null,
SysEndTime datetime2 Generated Always as Row End Not Null,
Period for System_Time (SysStartTime, SysEndTime)
)
with (System_Versioning = ON)
Cela va créer une table de base de données nommée sampletable et sa table d'historique correspondante dans la base de données actuelle
En utilisant System_versioning = ON va attribuer automatiquement le nom de la table système, mais si vous voulez explicitement mentionner votre table système comme ci-dessous
--create table or use existing table
CREATE TABLE [dbo].[table1](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [varchar](255) NOT NULL,
[updated_at] [datetime] NULL
)
GO
--Adding additional field for temporal tables
alter table dbo.table1
add start_time DATETIME2 generated always as row start hidden default sysutcdatetime()
,end_time DATETIME2 generated always as row end hidden default sysutcdatetime()
,period for system_time (start_time, end_time)
go
--enable system versioning
alter table dbo.table1
set (system_versioning = ON (history_table = dbo.table1_history))
go
merci @Japz for referri ng mon blog. –
@ManojPandey, j'ai trouvé cela en ligne et partagé ici :) blog parfait pour la question ci-dessus .. vous êtes les bienvenus et merci aussi pour votre poste. :) – Japongskie