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

單一 SQL 陳述式同時更新多張資料表多個欄位的實作技巧

     編輯:關於SqlServer

問題背景

需在同一交易中更新兩張關聯資料表的多個欄位。若拆成多條 UPDATE,缺乏交易控制時易導致資料不一致;若加交易則增加鎖持有時間。

解決方案:JOIN UPDATE 語法

SQL Server 支援在 UPDATE 中使用 JOIN,單一陳述式即可完成多表多欄位更新,隱含原子性。

語法範例

UPDATE u
SET 
    u.renren = '',
    b.renren_token = '',
    b.rt_time = ''
FROM dbo.[user] AS u
INNER JOIN dbo.binding AS b ON u.uid = b.uid
WHERE u.uid = @TargetUID;

關鍵點解析

  • UPDATE u 指定目標別名,實際寫入的是 u 所屬資料表 (user) 的欄位;SET 子句中同樣可直接更新 b (binding) 的欄位。
  • FROM 子句定義聯結關係,WHERE 過濾目標列。
  • 整條陳述式在單一隱含交易中完成,要么全成功、要么全失敗,無需顯式 BEGIN TRAN。

適用條件與限制

替代方案比較

條件說明
目標表唯一UPDATE 後只能跟一個目標別名,但 SET 可更新多表欄位
聯結鍵唯一ON 條件需保證 1:1 或 多:1,否則可能產生非預期多列更新
權限需同時具備兩表的 UPDATE 權限
觸發器兩表的 AFTER UPDATE 觸發器皆會各自觸發一次

結語

善用 UPDATE ... FROM ... JOIN 語法,能以最簡潔、最高效的方式實現多表多欄位的原子性更新,是 T-SQL 開發工具箱中的利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方案原子性鎖持有時間程式碼複雜度
JOIN UPDATE (推薦)✅最短低
顯式交易 + 多 UPDATE✅較長中
預存程序 + TRY/CATCH✅可控高
MERGE 陳述式✅中等高