2011-11-07 41 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。但我认为,你不应该盲目地复制它。 –

相关问题