2013-02-07 24 views
6

我有2個表:SQL更新表組 - 的多部分標識符無法綁定

  • 表1 =加油站的名稱(在對)
  • 表2 =具有共統籌
  • 實施例表1的

信息(經度和緯度除其他事項外):

StationID1 StationID2 Name1 Name2 Lattitude1 Longitude1 Lattitude2 Longitude2 Distance 
------------------------------------------------------------------------------------------------ 
93353477 52452 FOO  BAR  NULL  NULL  NULL NULL NULL 
93353527 52452 HENRY BENNY NULL  NULL  NULL NULL NULL 
93353551 52452 GALE SAM  NULL  NULL  NULL NULL NULL 

實施例的表2

IDInfo  Name Lattitude Longitude 
------------------------------------------- 
93353477 BAR 37.929654 -87.029622 

我想更新此表與座標駐留在tableA信息。我試着做以下按SQL Server 2005: The multi-part identifier … could not be bound

update table1 
set t1.[Lattitude1] = t2.[Lattitude] 
from table1 t1 
left join table2 t2 
on (t1.StationID1 = t2.IDInfo) 

我收到以下錯誤信息:

消息4104,級別16,狀態1,行1
多部分標識符「T1 .Lattitude1「無法綁定。

但是,如果我做了以下工作,然後我可以存儲到另一個表。

SELECT t1.[StationID1] 
     ,t1.[StationID2] 
     ,t1.[Name1] 
     ,t1.[Name2] 
     ,t2.[Lattitude] AS [Lattitude1] 
     ,t2.[Longitude] AS [Longitude1] 
     ,t3.[Lattitude] AS [Lattitude2] 
     ,t3.[Longitude] AS [Longitude2] 
from table1 t1 
left join table2 t2 
on (t1.StationID1 = t2.IDInfo) 
left join table2 t3 
on (t1.StationID2 = t2.IDInfo) 

我對SQL很新,很難理解爲什麼有些東西可以工作,而有些則不瞭解。基於我上面發佈的鏈接,我的初始查詢應該已經工作 - 不是嗎?也許我沒有直接思考,因爲我已經花了很多時間嘗試這個,我終於從同事那裏得到了幫助(她建議我上面提到的方法)。

回答

12

我認爲你可以修改你的UPDATE語句來引用UPDATE行中的表別名。

update t1 
set t1.[Lattitude1] = t2.[Lattitude] 
from table1 t1 
left join table2 t2 
on (t1.StationID1 = t2.IDInfo) 
+0

最好不要在FROM子句中使用別名或重複table1:update table1 set Lattitude1 = table2.Lattitude from table2 where table2.IDInfo = table1.StationID1。 SQL Server的「UPDATE ... FROM」結構是非標準的,特別是當使用別名時 - 有點神祕。如果FROM子句中的表或別名與UPDATE之後的內容匹配,那麼這些表會被神奇地識別,但如果涉及遠程查詢,則這可能會中斷(請參閱UPDATE .. FROM的幫助和http://bit.ly/14EXoZP)。 –

+0

@cgatian,鮑勃 - 非常感謝你的幫助。你的兩個解決方案都有效。我注意到史蒂夫卡斯提到的問題以防萬一。謝謝你們。 – codingknob

0

您需要更改內部表並將不同的別名賦予相似的列。這應該工作。

update table1 
set [Lattitude1] = x.[lat] 
from 
(
    SELECT IDInfo [id], Lattitude [lat] FROM 
    table2 
) x 
WHERE 
StationID1 = x.[id] 

在您的特定情況下,它沒有必要重新命名Lattitude爲緯度,但如果你最終更新與自己的表,並強迫自己入給列不同的名稱,這將節省你頭痛的道路。

相關問題