You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2019从备份表恢复主表缺失字段值的方法

SQL Server批量从备份表恢复主表NULL字段

正确的批量更新脚本

UPDATE p
SET 
    p.Col1 = ISNULL(p.Col1, a.Col1),
    p.Col2 = ISNULL(p.Col2, a.Col2),
    p.Col3 = ISNULL(p.Col3, a.Col3),
    p.Col4 = ISNULL(p.Col4, a.Col4),
    p.Col5 = ISNULL(p.Col5, a.Col5),
    p.Col6 = ISNULL(p.Col6, a.Col6)
FROM Reps p
INNER JOIN Deleted a 
    ON p.ID = a.ID
-- 可选:过滤出至少有一个NULL字段的行,避免无意义更新
WHERE 
    p.Col1 IS NULL 
    OR p.Col2 IS NULL 
    OR p.Col3 IS NULL 
    OR p.Col4 IS NULL 
    OR p.Col5 IS NULL 
    OR p.Col6 IS NULL

你之前批量写法失效的原因

注释里的ISNULL逻辑本身没问题,大概率是执行时的语法疏漏:

  • 检查每个字段赋值语句末尾是否加了逗号(比如p.Col1 = ISNULL(...)后面必须有逗号,最后一个字段除外)
  • 不需要为每个字段单独加a.ColX IS NOT NULL AND p.ColX IS NULL的条件,ISNULL会自动判断:仅当主表字段为NULL时,才用备份表的值替换,否则保留主表原值。

脚本逻辑说明

  1. 通过INNER JOIN按ID匹配主表和备份表的同一数据行
  2. ISNULL(p.ColX, a.ColX)实现:主表字段非NULL则保留,为NULL则用备份表对应值填充
  3. 可选的WHERE子句能减少不必要的更新,只处理存在NULL字段的行

针对你的示例数据的效果

执行脚本后:

  • ID=1的Col3、ID=2的Col5、ID=4的Col1会被备份表对应值替换
  • ID=3无需要修改的NULL字段,不会被更新

内容的提问来源于stack exchange,提问作者user466663

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 06:03:22