LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

SQL Server 系统版本控制临时表:行级“时间旅行”

admin
2026年4月8日 9:19 本文热度 38
在数据库管理中,误操作如误删、误更新几乎是每个 DBA 都会遇到的问题。传统依赖备份的恢复方式不仅耗时,而且往往需要停机,影响业务连续性。自SQL Server 2016起,系统版本控制临时表(System-Versioned Temporal Tables)为解决这些问题提供了一条革命性的路径,让数据“穿越时间”成为可能。

1. 临时表的双表架构

系统版本控制临时表通过双表架构实现行级历史追溯:

组件

功能

存储内容

当前表(Current Table)

提供实时业务访问

数据的最新状态及 ValidFrom 时间戳

历史表(History Table)

自动审计与追溯

数据的所有历史修订版本及有效期

每当当前表中的行被更新或删除时,SQL Server 引擎会自动将旧版本数据及其有效期戳移入历史表。这一机制完全透明,应用层无需额外逻辑即可获得历史数据。

💡 换句话说,你的数据库就像开了“时间机器”,可以回到某一时刻查看或恢复数据。

接下来的操作步骤+命令示例教你如何启用临时表、查询历史数据,并恢复误操作的数据。

1. 创建系统版本控制临时表

系统版本控制表需要当前表历史表两个组成部分。
以下示例创建一个员工表,并启用系统版本控制:
-- 2. 创建当前表并启用系统版本控制CREATE TABLE dbo.Employees (    ID INT PRIMARY KEY,    Name NVARCHAR(50),    Salary DECIMAL(10,2),    ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START,    ValidTo DATETIME2 GENERATED ALWAYS AS ROW END,    PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo))WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeesHistory));
这个命令可以看见自动创建了两个表
✅ 完成后,表的更新和删除都会自动记录历史版本,无需手动操作。

2. 插入初始数据

INSERT INTO dbo.Employees (ID, Name, Salary) VALUES(101'张三'8000),(102'李四'9000),(103'王五'10000);
此时,历史表仍为空,数据都在当前表中。

3. 模拟误操作

假设误删了员工 ID 为 101 的记录:
DELETE FROM dbo.Employees WHERE ID = 101;
误更新了员工工资:
UPDATE dbo.EmployeesSET Salary = Salary * 0.8WHERE ID = 102;
历史表会自动记录这些旧版本数据及有效期时间戳。

4. 查询历史数据

使用 FOR SYSTEM_TIME 子句,可以查看历史版本数据:
SELECT *FROM dbo.EmployeesFOR SYSTEM_TIME AS OF '2026-04-02 09:53:45';
也可以查询某段时间的所有变更:
SELECT *FROM dbo.EmployeesFOR SYSTEM_TIME BETWEEN '2026-04-02 09:53:06' AND '2026-04-02 09:54:06';

5. 恢复误删除或误更新的数据

恢复误删除的单行数据

INSERT INTO dbo.Employees (ID, Name, Salary)SELECT ID, Name, SalaryFROM dbo.EmployeesFOR SYSTEM_TIME AS OF '2026-04-02 09:53:45'WHERE ID = 101;
假设要还原 ID 为 102 的员工工资:
UPDATE eSET e.Salary = h.SalaryFROM dbo.Employees AS eJOIN dbo.Employees FOR SYSTEM_TIME AS OF '2026-04-02 09:54:06' AS hON e.ID = h.IDWHERE e.ID = 102;

注意:FOR SYSTEM_TIME AS OF 是查询历史表的关键,它保证你从历史版本取到的是准确时间点的数据。

总结

通过以上步骤,你可以做到:
启用系统版本控制临时表
自动记录每行数据历史
在线、选择性地恢复误操作的数据
与传统备份恢复相比,它对业务几乎零中断,操作灵活、精确,是现代 SQL Server 数据治理的重要工具。


阅读原文:https://mp.weixin.qq.com/s/dwlK1yV3VLM-t6YQSxnq9A


该文章在 2026/4/8 9:20:10 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2026 ClickSun All Rights Reserved  粤ICP备13012886号-1  粤公网安备44030602007207号