2011-11-07 103 views
4

我不得不從一個數據庫更新SQL Server中的一個表到另一個,我想知道如何做到這一點與從一個數據庫中選擇更新另一個

這裏是我的榜樣

UPDATE [Logix].[sysdba].[TICKET] (
    STATUSCODE) 
SELECT TICKETID, GM_NUMBER, STATUSCODE 
FROM [Logix_Dev].[sysdba].[TICKET] 
where GM_NUMBER <> '' 

但我覺得這是錯誤的語法......基本上我想要做的是從Logix_Dev數據庫中的TICKET表中選擇所有記錄,並更新TICKETID匹配的Logix數據庫上的狀態碼....

+1

數據庫是否在同一個SQL Server實例上? –

+0

是的......他們是 – Trace

+0

@Tamer - 那麼我的答案應該爲你工作。 – JonH

回答

6

使用別名讓你的生活更輕鬆(同一個實例):

UPDATE l 
SET l.STATUSCODE=s.someVal 
FROM Logix.sysdba.Ticket l 
INNER JOIN Logix_dev.sysdba.ticket s 
ON s.ID = l.ID 

你當然需要相應的列替換s.ID和l.ID(TicketID?):

UPDATE l 
SET l.STATUSCODE=s.STATUSCODE 
FROM Logix.sysdba.Ticket l 
INNER JOIN Logix_dev.sysdba.ticket s 
ON s.TicketID = l.TicketID 
WHERE s.GM_NUMBER = '' 

如果他們是在同一個實例的話就不用兩個點(..)。如果它是另一個實例鏈接的服務器,或者您需要兩個點(..):

鏈接服務器:

UPDATE l 
SET l.STATUSCODE=s.someVal 
FROM Logix.sysdba.Ticket l 
INNER JOIN Logix_dev..sysdba.ticket s 
ON s.ID = l.ID 
+0

你忘了'WHERE s.GM_NUMBER <>''' –

+0

@Drackir - 教一個人釣魚 - 不要給他們魚。這只是一個補充。 – JonH

+0

謝謝你複製我的答案。 – misha

0

這就是:

UPDATE [Logix].[sysdba].[TICKET] (
    STATUSCODE) 
SELECT TICKETID, GM_NUMBER, STATUSCODE 
FROM [Logix_Dev]..[sysdba].[TICKET] 
where GM_NUMBER <> '' 

通知的雙點在數據庫名稱後面。

+1

雙點只有當它是一個鏈接服務器或其他實例時才需要。 – JonH

+0

實際上雙點是在你的查詢中的* server *名字之後,而不是在* DB *名字之後。另外,你的語法錯了。 –

+0

哎呀,對不起,這不是你,是那些語法錯誤的OP。但我認爲,你不應該盲目地複製它。 –

相關問題