如何从时态表删除列且保留历史表数据?
解决时态表删除列同时保留历史数据的方法
核心思路是先备份历史表数据,同步调整时态表与历史表的结构后,再将备份数据导回历史表,具体步骤如下:
- 关闭系统版本控制(保留历史表关联)
ALTER TABLE [当前时态表名] SET (SYSTEM_VERSIONING = OFF); - 备份历史表全量数据到临时表
SELECT * INTO [历史表备份临时表名] FROM [原历史表名]; - 修改历史表结构,删除目标列
ALTER TABLE [原历史表名] DROP COLUMN [要删除的列名]; - 修改时态表结构,删除目标列
ALTER TABLE [当前时态表名] DROP COLUMN [要删除的列名]; - 重新开启系统版本控制,指定原历史表作为历史记录表
ALTER TABLE [当前时态表名] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = [原历史表名])); - 将临时表中排除已删除列的数据导回历史表
INSERT INTO [原历史表名] SELECT [历史表剩余列名列表] FROM [历史表备份临时表名]; - 验证数据无误后,删除临时表
DROP TABLE [历史表备份临时表名];
注意事项
- 操作前务必全量备份数据库,避免意外数据丢失
- 确保时态表与历史表删除列后的结构完全匹配,否则无法重新开启系统版本控制
- 若历史表数据量较大,建议在业务低峰期执行操作,减少对业务的影响
内容的提问来源于stack exchange,提问作者Ester
相关产品推荐
相关产品推荐

