我在SQL服务器中有一个时态/系统版本化表,我想从原始时态表中复制/复制该表以及整个历史.

可以在SQL Server中复制/复制时态表吗?如果可以,步骤是什么.

这只是当前可用表格的一次性副本.

谢谢

推荐答案

我真的看不出这里有什么问题,就像你对任何其他桌子一样复制一份.只需执行两次,一次用于主表,一次用于历史表.

如果您有带有时态表DepartmentHistory的表Department,则只需为两者 Select Into Copies即可.

SELECT * INTO Department_COPY FROM Department
SELECT * INTO DepartmentHistory_COPY FROM DepartmentHistory

Here is a dbfiddle sample of this

显然,SELECT INTO只是一个简单的备份,如果您希望新表拥有所有键并在以后继续使用,您可以首先手动创建它们,然后使用

INSERT INTO Department_COPY SELECT * FROM Department
INSERT INTO DepartmentHistory_COPY  SELECT * FROM DepartmentHistory

如果要在副本上启用历史记录跟踪,可以使用以下命令:

ALTER TABLE Department_COPY ADD PERIOD
FOR SYSTEM_TIME([ValidFrom], [ValidTo]);

ALTER TABLE Department_COPY SET (
    SYSTEM_VERSIONING = ON (
        HISTORY_TABLE = dbo.DepartmentHistory_COPY,
        DATA_CONSISTENCY_CHECK = ON
    )
);

Sql相关问答推荐

判断时间之间是否有时间

SQL查询以创建手头的流动余额?

在数据分区内执行确定

在SQL中将相同且紧挨着的元素进行分组

在Golang中管理数据库事务的简洁方法

有没有办法在每次计算每一行的数据时更新2个值?

在多个柱上连接时,如何确定连接条件?

为什么在postgres中,横向连接比相关子查询快?

在SQL中使用类别值将行转置为列

在Oracle中,如何删除具有特定值的行,仅当它是重复的行?

检索上一个星期四和上一个星期三

重用传递给 node 的参数-postgres upsert查询

使用CTE在SNOWFLAKE中创建临时表

将时间戳四舍五入到最近 10 分钟的查询

汇总具有连续日期范围的行

在where语句中使用CTE非常缓慢

为 sqlite 全文搜索 (fts) 创建触发器时出现虚拟表的不安全使用

使用标准SQL 触发更新当前日期

SQL Server Where 条件

为什么这是 AND,OR with NULL 的真值表?