Sql Update语句问题

时间:2009-11-25 18:59:50

标签: sql sql-server

我正拼命地为生产环境创建一个决赛桌,但我有一些问题......

我的数据库中有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

2 个答案:

答案 0 :(得分:1)

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

JOIN将限制在匹配的位置。

但是,您可能需要在WHERE子句或更多JOIN条件中使用更多过滤器 这仍将更新表格相交的每一行

答案 1 :(得分:0)

您的两张桌子只需加入:

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