2009-11-25 103 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