2015-09-22 114 views

回答

3

here

爲了使一個表,它需要的 系統版本化表以下:

  • 主鍵
  • 表選項SYSTEM_VERSIONING被設置爲ON
  • 兩個不可爲空的DATETIME2()列,表示行的有效期的開始和結束
    • 開始列應始終產生AS ROW選項被標記START
    • 最終列上應註明始終產生AS ROW END選項
  • 期間列名稱:PERIOD FOR SYSTEM_TIME (,)
  • 鏈接的歷史記錄表(SQL Server可以爲您創建)持有修改行的過去狀態
2

你ç一個參考此兩個鏈接:

http://sqlmag.com/sql-server/first-look-system-versioned-temporal-tables-part-1-creating-tables-and-modifying-data

http://blogs.msdn.com/b/manub22/archive/2015/06/30/temporal-data-with-system-versioned-tables-in-sql-server-2016.aspx

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 

幣上面的源代碼的鏈接。

+0

謝謝@Japz for referri在我的博客文章。 –

+1

@ManojPandey,我發現在線和共享在這裏:)上述問題完美的博客文章..不客氣,也感謝你的帖子。 :) – Japongskie

0

請參考樣本案例how to create temporal tables in SQL Server根據每種情況。

最簡單的形式是創建一個新的SQL表的態表如下

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) 

這將創建在當前數據庫

1

名爲sampleTable數據庫表和相應的歷史記錄表使用System_versioning =它會自動分配系統表名稱,但如果你想明確提到你的系統表如下所示

--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