2009-10-16 16 views
1

我使用SQL Server 2008,並試圖在Management Studio中運行以下查詢:不需更新使用JOIN

 UPDATE 
     Table1 as T1 INNER JOIN Table2 as T2 ON T1.ID=T2.ID 
     SET T1.SomeValue = T2.SomeValue 

     GO 

不工作,雖然。這種事情是否得到支持?

卡爾

[編輯] 讓我更清楚,我wan't做這樣的事情:

 UPDATE 
     Table1 as T1 INNER JOIN Table2 as T2 ON T1.ID=T2.ID 
     SET T1.SomeValue = T2.SomeValue 
     T1.SomeValue2 = T2.SomeValue2 
     T1.SomeValue3 = T2.SomeValue3 
     T1.SomeValue4 = T2.SomeValue4 

     GO 

即不必明確做T1.SomeValue = SELECT ... ,T2.SomeValue = SELECT ...

回答

7

,如果你重寫它類似於這樣它應該工作:

UPDATE Table1 
SET Table1.SomeValue = T2.SomeValue 
FROM Table2 AS T2 
WHERE Table1.ID = T2.ID 
2

試試這個

DECLARE @Table1 TABLE(
     ID INT, 
     Val VARCHAR(MAX) 
) 

DECLARE @Table2 TABLE(
     ID INT, 
     Val VARCHAR(MAX) 
) 

INSERT INTO @Table1 (ID,Val) SELECT 1, '' 
INSERT INTO @Table1 (ID,Val) SELECT 2, '' 
INSERT INTO @Table1 (ID,Val) SELECT 3, '' 

INSERT INTO @Table2 (ID,Val) SELECT 1, 'a' 
INSERT INTO @Table2 (ID,Val) SELECT 2, 'a' 

UPDATE @Table1 
SET Val = t2.Val 
FROM @Table1 t1 INNER JOIN 
     @Table2 t2 ON t1.ID = t2.ID 


SELECT * FROM @Table1 
0

我認爲

UPDATE Table1 as T1... 

會導致更新別名和保持不變的實際表。

您可以使用標量子查詢,例如

UPDATE Table1 
    SET SomeValue = (
        SELECT T2.SomeValue 
         FROM Table2 as T2 
        WHERE T2.ID = Table1.ID 
        ); 
0

更新T1設置T1.Col1 = T2.Col2內使用 「更新了加盟」 加入T2上T1.Id = T2.FId

1

避免在SQL Server 2008功能使用MERGE代替。 MERGE是標準SQL(與UPDATE連接語法不同),它經常執行得更好並且更可靠,因爲它沒有像Microsoft專有的UPDATE語法那樣的缺陷。