2010-01-17 54 views
3

我正在嘗試使用子查詢更新MS SQL語句中的多個列。一個搜索導致我喜歡的東西:使用綁定的多部分標識符更新SQL中的多列

UPDATE table1 
SET col1 = a.col1, col2 = a.col2, col3 = a.col3 FROM 
(SELECT col1, col2, col3 from table2 where <expression>) AS a 
WHERE table1.col1 <expression> 

http://geekswithblogs.net/phoenix/archive/2009/10/13/update-multiple-columns-on-sql-server.aspx

我的問題是,在內部WHERE表達我需要在表1的特定字段的引用:

UPDATE table1 
SET col1 = a.col1, col2 = a.col2, col3 = a.col3 FROM 
(SELECT col1, col2, col3 from table2 where table1.col0 = table2.col0) AS a 
WHERE table1.col1 <expression> 

當我運行該查詢得到「多部分標識符」table1.col0「無法綁定。」 「。顯然,使用該語法時,SQL無法綁定子查詢中的當前table1記錄。現在我重複每個字段的子查詢和使用的語法:

UPDATE table1 
SET col1 = (subquery), col2 = (subquery)... 

但執行的子查詢(這是非常昂貴的)每列,這是我想避免一次。

任何想法?

回答

8

在sql server中,您可以在更新查詢中使用from子句。像在select中一樣加入表格。您正在更新的表必須包含在連接中。

update table_1 
    set field_1 = table_2.value_1 
    from table_1 
    inner join table_2 
     on (table_1.id = table_2.id) 
1

或者,如果你不喜歡聯接語法這也將工作:

UPDATE table1 
SET col1 = a.col1, col2 = a.col2, col3 = a.col3 
FROM table1, table2 as a 
WHERE table1.col0 = a.col0 
AND table1.col1 <expression> 
2

車內使用CROSS APPLY命令來更新多個列從子選擇

UPDATE t1 
SET t1.col1 = a.col1, t1.col2 = a.col2, t1.col3 = a.col3 
FROM table1 t1 
CROSS APPLY 
(SELECT col1, col2, col3 from table2 where table1.col0 = table2.col0) a(col1,col2,col3) 
相關問題