2009-10-16 19 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语法那样的缺陷。