个人技术站点JASONWU

Keep Coding


  • 主页

  • 文章

  • 搜索

SQL Server 字段级恢复:基于主键的备份表关联方法

新建: 2025-08-07 编辑: 2025-08-07   |   分类: 后端开发   | 字数: 714 字

在 SQL Server 中,通过关联(主键或其他唯一键)备份表进行字段级恢复,是业界最佳实践之一,尤其针对需要精细恢复部分字段(而非整表插入)的场景。

这种方式能够最大限度地减少对现有数据的影响,避免全表清空或覆盖,只修正有问题的字段和记录。

  • 高精度:仅影响需要修复的字段和行,风险最小
  • 高性能:只更新需要的数据,尤其适合大型数据库或高并发环境
  • 易于回滚:可配合事务(begin tran/commit/rollback)操作,增强安全性
  • 适用范围广:可通过 where 条件灵活过滤,支持批量或个别字段恢复
SQL
 1-- 删除旧表(如果已存在)
 2if object_id('dbo.WXJ_TEST') is not null
 3    drop table dbo.WXJ_TEST;
 4
 5-- 创建原始表
 6create table dbo.WXJ_TEST (
 7    test_id   int identity primary key,
 8    test_name varchar(50)
 9);
10
11-- 插入原始数据
12insert into dbo.WXJ_TEST (test_name) values
13('原始1'),
14('原始2'),
15('原始3');
16
17-- 数据库表备份:创建备份表,并将原始表数据复制到备份表
18if object_id('dbo.WXJ_TEST_BACKUP_20250807_1150') is not null
19    drop table dbo.WXJ_TEST_BACKUP_20250807_1150;
20
21select * into dbo.WXJ_TEST_BACKUP_20250807_1150 from dbo.WXJ_TEST;
22
23-- 假设这里修改了原始表数据
24update dbo.WXJ_TEST set test_name = '修改后的1' where test_id = 1;
25update dbo.WXJ_TEST set test_name = '修改后的2' where test_id = 2;
26
27-- ===== 数据库表数据恢复工作流 =====
28-- 差异验证:对比原表和备份表的相关字段差异,便于核查即将恢复的内容
29select
30    orig.test_id as 原始表_test_id,
31    orig.test_name as 原始表_test_name,
32    bak.test_id as 备份表_test_id,
33    bak.test_name as 备份表_test_name
34from dbo.WXJ_TEST orig
35    join dbo.WXJ_TEST_BACKUP_20250807_1150 bak on orig.test_id = bak.test_id
36where
37    -- 可加更细粒度的条件,只恢复部分行
38    bak.test_id in (1, 2);
39
40-- 开始事务
41begin transaction;
42
43-- 主键关联备份表,恢复单个或多个字段
44update orig
45set
46    orig.test_name = bak.test_name
47from dbo.WXJ_TEST orig
48    join dbo.WXJ_TEST_BACKUP_20250807_1150 bak on orig.test_id = bak.test_id
49where
50    -- 可加更细粒度的条件,只恢复部分行
51    bak.test_id in (1, 2);
52
53-- 再次确认恢复效果
54select * from dbo.WXJ_TEST where test_id in (1, 2);
55
56-- 若无误,则提交事务
57commit transaction;
58
59-- 如果发现问题,则回滚事务
60-- rollback transaction;
#SQL# #备份与恢复# #SQL Server#

文章:SQL Server 字段级恢复:基于主键的备份表关联方法

链接:https://www.wuxianjie.net/posts/backend/mssql-backup-recover/

作者:吴仙杰

文章: 本博客文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议,转载请注明出处!

SQL Server:COALESCE 和 ISNULL 的坑与最佳实践
SQL Server 异常处理:自定义错误、事务管理
  • 文章目录
  • 站点概览
吴仙杰

吴仙杰

🔍 Ctrl+K / ⌘K

27 文章
9 分类
25 标签
邮箱 GitHub
© 2021-2025 吴仙杰 保留所有权利 All Rights Reserved
浙公网安备 33010302003726号 浙ICP备2021017187号-1
0%