在2个不同的SQL Server上查询2个数据库

时间:2014-11-07 17:42:32

标签: sql-server-2014

在回顾许多答案时,没有看到我认为应该简单的解决方案。

由于ERP供应商的更新导致数据丢失,我试图在另一台服务器上的已恢复数据库中更新一台服务器上Production数据库中的几个字段。

无论如何,在SSMS中连接两台服务器,只想运行下面的查询:

USE coll18_production;
GO
USE coll18_test2;
GO

UPDATE coll18_Production.dbo.PERSON
SET W71_ID_CRD_NO = T2.PERSON_USER1, W71_ID_CRD_DATE = T2.PERSON_USER9
FROM coll18_test2.dbo.PERSON as T2
WHERE coll18_Production.dbo.PERSON.ID = T2.ID;

我认为这是一个简单的更新,但无法通过相同的表格查询2个不同的服务器数据库。

谢谢,如果有人可以这么简单,

唐纳德

好的,谢谢你的意见。在时间的本质上,我将做一些类似于cpaccho推荐的事情。创建一个临时表,其中包含我要在生产数据库中更新的2个字段。然后我将连接到我从备份恢复的Test2数据库。使用主键将这两个字段导出为csv文件,然后将此表数据简单地还原到temp中。我的生产数据库中的表。然后只需将我的更新从此临时表运行到我的生产PERSON表中的2个字段,其中ID彼此相等。

周末愉快, 唐纳德

2 个答案:

答案 0 :(得分:0)

问题在于,由于数据库位于两个不同的服务器上以便在它们之间加入,因此您需要一种方法让服务器相互通信。

这样做的方法是通过链接服务器。然后,您可以使用4部分命名(server.DB.Schema.Table)设置查询以将2个表连接在一起并完成目标。查询看起来像这样:

UPDATE Server.DB.Schema.Table1
   SET column = b.column
  FROM Server1.DB.Schema.Table1 a
 INNER JOIN Server2.DB.Schema.Table2 b
    ON a.column = b.column
 Where a.column = something

您只需要在一侧设置链接服务器,查询中的服务器名称将是您为链接服务器指定的名称。唯一需要注意的是,这可能很慢,因为为了加入表,SQL Server可能必须将整个表从一个服务器复制到另一个服务器。我还会在您要更新的服务器上设置链接服务器(以便在与要更新的数据库相同的服务器上运行更新)

How to set up Linked Server Microsoft KB

答案 1 :(得分:0)

一种简单而相当粗俗的方法是将表从数据库硬拷贝到数据库......

首先创建一个包含所需更改的表:

USE coll18_test2;
GO

SELECT PERSON_USER1, PERSON_USER9, ID    
INTO dbo.MyMrigationOrWhateverNameYouLike
FROM coll18_test2.dbo.PERSON 

然后转到SSMS,右键单击coll18_test2数据库 - >任务 - >生成脚本并与助手一起为新创建的表生成脚本。不要忘记在高级选项中设置"数据类型到脚本" to" Schema和" Data"。

现在您已拥有脚本,只需在生产数据库中运行它,然后根据该表进行查询。

UPDATE dbo.PERSON
SET W71_ID_CRD_NO = T2.PERSON_USER1, W71_ID_CRD_DATE = T2.PERSON_USER9
FROM dbo.MyMrigationOrWhateverNameYouLike as T2
WHERE coll18_Production.dbo.PERSON.ID = T2.ID;

最后放下MyMrigationOrWhateverNameYouLike表,你就完成了......