問:怎樣在一個UPDATE語句中使用表B的三個列更新表A中的三個列?
答:對這個問題,您可以使用強大的關系代數。本頁中的代碼說明了如何組合使用FROM子句和JOIN操作,以達到用其他表中數據更新指定列的目的。在設計關系表達式時,您需要決定是否需要單一行匹配多個行(一對多關系),或者需要多個行匹配被聯接表中的單一行以更新所有行(多對一關系)。
在一對多關系中,SQL Server始終使用它找到的最後一行更新數據。但是,您無法控制最後一行所在的位置。在多處理器的計算機上,查詢可能是同步進行的,相同的查詢最後一行的位置可能會不同。因此,Microsoft建議盡量不要使用一對多關系。
如果待更新的表與FROM子句中的表相同,並且FROM子句只包含對該表的一個引用,別名可能未被指定。如果待更新的表在FROM子句中出現了多次,只有該表的一個引用可以省略表的別名,對該表的所有其他引用必須包含一個表別名。
USE tempdb
GO
CREATE TABLE #t1 (c1 int NOT NULL, c2 char(5), c3 char(5),
c4 char(5))
GO
CREATE TABLE #t2 (c1 int NOT NULL, c2 char(5), c3 char(5),
c4 char(5))
GO
--數據賦值
INSERT #t1 values (1,'hello','there','fred')
INSERT #t2 values (1,'how','are','you?')
--更新數據
UPDATE #t1 SET #t1.c2 = #t2.c2, #t1.c3 = #t2.c3,
#t1.c4 = #t2.c4
FROM #t2
WHERE #t1.c1 = #t2.c1
--檢查結果
SELECT * FROM #t1
—Microsoft SQL Server開發團隊