首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 跨表更新實戰:從表 B 同步數據到表 A 的高效寫法

     編輯:關於SqlServer

場景描述

需將表 NT_dict_area 的 BriefNamePin、AllNamePin 字段,根據 Name 匹配從表 NT_areapin 同步更新。

標準 UPDATE ... FROM 寫法

UPDATE NT_dict_area
SET BriefNamePin = NT_areapin.BriefNamePin,
    AllNamePin   = NT_areapin.AllNamePin
FROM NT_dict_area
INNER JOIN NT_areapin 
    ON NT_dict_area.Name = NT_areapin.Name

關鍵點解析

  • 使用 INNER JOIN 替代舊式逗號連接,語義清晰、易維護。
  • SET 子句直接引用源表別名列,避免子查詢重複掃描。
  • 若 Name 非唯一,需確認業務邏輯:是否允許一對多更新,或需加額外條件過濾。

進階場景:MERGE 語句(SQL Server 2008+)

當需要同步「插入新、更新舊、刪除多餘」三合一時,MERGE 更優雅:

MERGE INTO NT_dict_area AS target
USING NT_areapin AS source
    ON target.Name = source.Name
WHEN MATCHED THEN
    UPDATE SET target.BriefNamePin = source.BriefNamePin,
               target.AllNamePin   = source.AllNamePin
WHEN NOT MATCHED BY TARGET THEN
    INSERT (Name, BriefNamePin, AllNamePin)
    VALUES (source.Name, source.BriefNamePin, source.AllNamePin)
WHEN NOT MATCHED BY SOURCE THEN
    DELETE; -- 可選:刪除源表已無的目標行

性能建議

  1. 確保連接鍵 Name 上有索引。
  2. 大數據量時分批提交(如每 5000 行),避免長事務鎖升級。
  3. 更新前先 SELECT 對比行數,確認影響範圍。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved