2016-07-08 52 views
1

我在不同服務器上的相同數據庫上運行一些腳本。服務器特定錯誤:多部分標識符無法綁定

當腳本成功運行在多數人身上,一些我收到此錯誤:

UPDATE DB.T1 
SET SONUM = 0 
WHERE SONUM <> 0 
    AND NOT EXISTS (
     SELECT SERVICEORDER 
     FROM DB.T2 
     WHERE SERVICEORDER = T1.SONUM 
     ) 

The multi-part identifier T1.SONUM could not be bound

我的問題是,爲什麼它成功地在一些服務器上運行,但不是全部?我該如何解決它?

我可以用這一個替換上面的查詢?:

UPDATE DB.T1 
SET SONUM = 0 
WHERE SONUM NOT IN (
     SELECT SERVICEORDER 
     FROM DB.T2 
     ) 
    AND SONUM <> 0 
+0

您沒有向我們展示正確的查詢。我沒有在其中任何一箇中看到'T1.SONUM'。 –

+0

謝謝,剛剛編輯 – Far

+1

你如何在第一個語句中有多個「WHERE」子句?你也不會告訴我們「B5」表來自哪裏。該聲明將無法在任何服務器上運行。語法有錯誤。 – EMUEVIL

回答

0

給你的表的別名。看起來好像T1在架構DB中,EXISTS可能在默認DBO看。

試試這個:

UPDATE T 
SET SONUM = 0 
FROM DB.T1 T 
WHERE SONUM <> 0 
AND NOT EXISTS (SELECT SERVICEORDER 
       FROM DB.T2 
       WHERE SERVICEORDER = T.SONUM) 

注:當然,將它轉換爲一個選擇,並確保在更新前你得到正確的結果。

0

你可能會得到錯誤的原因是因爲你的表之間的列名之間的不一致。 「SONUM」列需要存在於你正在運行的每個表中。

檢查表模式後,如果您決定仍然想要進行這些更新。下面的查詢應該做和你似乎不需要子查詢一樣的事情。

它將更新DB.T1的SONUM爲0,對於當前不是0的記錄,並且沒有來自DB.T2的關聯SERVICEORDER。

首先,用select語句預覽要更新的列是個好主意。隨後將更新聲明以實際更改它們。

SELECT DB.T1.SONUM 
    , DB.T2.SERVICEORDER 
FROM DB.T1 
    LEFT JOIN DB.T2 
     ON DB.T1.SONUM = DB.T2.SERVICEORDER 
WHERE DB.T2.SERVICEORDER IS NULL 
AND DB.T1.SONUM <> 0 

和更新...

UPDATE DB.T1 
SET SONUM = 0 
FROM DB.T1 
    LEFT JOIN DB.T2 
     ON DB.T1.SONUM = DB.T2.SERVICEORDER 
WHERE DB.T2.SERVICEORDER IS NULL 
AND DB.T1.SONUM <> 0 
+0

UPDATE SET db.BIF050 = D_DEPOSITQUOTEDDATE (選擇案例當D_DATERECEIVED Far

+0

同樣的錯誤..我真的很難爲其他人編寫的所有腳本獲取相同的錯誤 – Far

+0

是否與SQL版本有關? – Far

相關問題