gpt4 book ai didi

sql - 如何通过保留数据将现有表更改为 SQL 临时表?

转载 作者:行者123 更新时间:2023-12-02 12:24:44 25 4
gpt4 key购买 nike

我有很多包含数据的表,我想将其转换为 Microsoft 时态表,但是当我想转换时态表时会导致数据丢失。我的代码是:

Alter TABLE dbo.Employee   
(
[EmployeeID] int NOT NULL PRIMARY KEY CLUSTERED
, [Name] nvarchar(100) NOT NULL
, [Position] varchar(100) NOT NULL
, [Department] varchar(100) NOT NULL
, [Address] nvarchar(1024) NOT NULL
, [AnnualSalary] decimal (10,2) NOT NULL
, [ValidFrom] datetime2 (2) GENERATED ALWAYS AS ROW START
, [ValidTo] datetime2 (2) GENERATED ALWAYS AS ROW END
, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));

如何通过保留数据将现有表更改为 Sql 时态表?

最佳答案

分两步在 Employee 表中启用系统版本控制

  1. 添加新的周期列(隐藏)
  2. 创建默认历史表

    ALTER TABLE Employee   
    ADD
    ValidFrom datetime2 (2) GENERATED ALWAYS AS ROW START HIDDEN
    constraint DF_ValidFrom DEFAULT DATEADD(second, -1, SYSUTCDATETIME())
    , ValidTo datetime2 (2) GENERATED ALWAYS AS ROW END HIDDEN
    constraint DF_ValidTo DEFAULT '9999.12.31 23:59:59.99'
    , PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo);

    ALTER TABLE Employee
    SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.Employee_History));

执行上述脚本后,所有数据更改都将透明地收集在历史表中。在典型的数据审计场景中,您将查询在感兴趣的时间段内应用于单个行的所有数据更改。默认历史表是使用集群行存储 B 树创建的,以有效解决此用例。

关于sql - 如何通过保留数据将现有表更改为 SQL 临时表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40506532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com