2009-11-25 137 views
0

我拼命想创建一个最终的表生产envirnment,但是林有一些问题....SQL UPDATE语句发出

我在我的数据库2个表。 MyTable具有与另一个(AnotherTable)完全相同的格式。 AnotherTable具有我希望在MyTable中的最终值。

我正在尝试更新MyTable的gq值,使其等于AnotherTable的gq值中的值。我无法在生产中使用AnotherTable,因为它是归档数据...

因此我担心。我写了一个更新声明(下面),试图做到这一点。问题是我不想在每次调用此更新时更新MyTable的每一行。我的第二个where子句抛出了“不能绑定的多部分标识符”错误。然而,我需要在那里有第二个where子句,以保证我不会一次更新整个数据库的信息价值。

请帮忙!我仍然感觉像一个福利局

UPDATE MyTable 
SET MyTable.gq= 
    (select top 1 ANotherTable.GQ as gq 
    from AnotherTable , MyTable 
    WHERE CONVERT(VARCHAR(MAX), AnotherTable.UniqueTextField)= MyTable.uniqueVarCharField 
    ) 
WHERE CONVERT(VARCHAR(MAX), AnotherTable. UniqueTextField) 
     = MyTable.uniqueVarCharField 

回答

1
UPDATE 
    M 
SET 
    MyTable.gq = A.gq 
FROM 
    MyTable M 
    JOIN 
    AnotherTable A ON CONVERT(VARCHAR(MAX), A.UniqueTextField)= M.uniqueVarCharField 

联接将限制它相匹配的位置。

但是,您可能需要进一步的过滤器在WHERE子句中以上JOIN为什么不是需要这种选择更多的行条件 在表相交

+0

这仍然会更新每一行?我怎样才能让它只更新我想要的行? – rockit 2009-11-25 20:14:04

+0

您必须筛选要更新的行,而不是所有匹配的行。例如:表格是否有共同的密钥? – gbn 2009-11-25 20:23:54

0

你的两个表只需要一个连接:

UPDATE m SET m.Field = o.Field 
FROM MyTable m INNER JOIN otherTable o ON m.JoinedField=o.JoinedField