将数据从一个 SQL Server 数据库表复制到另一个表

9

我希望将一个表中的数据从一个服务器复制到另一个服务器。

如果在同一台服务器上但不同的数据库之间,我已经使用了以下方法:

SELECT * INTO DB1..TBL1 FROM DB2..TBL1 (to copy with table structure and data)

INSERT INTO DB1..TBL1(F1, F2) SELECT F1, F2 FROM DB2..TBL1 (copy only data)

现在我的问题是如何将来自SERVER1的数据复制到DB1->TBL1,然后再复制到SERVER2->DB2->TBL2。
3个回答

32
如果在SQL Server中将这两个服务器设置为联接服务器,则可以使用完全限定名称。
Insert Into Server1.Database1.dbo.Table1 (Col1, Col2)
Select Col1, Col2 From Server2.Database2.dbo.Table2
你还可以右键单击数据库,然后转到任务->导入数据导出数据(在SQL 2000中,菜单选项称为所有任务)。
这将启动向导并为您执行导入/导出操作。
编辑:
这里是创建链接服务器的链接- http://msdn.microsoft.com/en-us/library/ms190479.aspx 您可以通过执行以下命令来查看服务器列表:
select * from sys.servers
< p> 或者通过 Server Objects > Linked Servers 文件夹。 < /p> < p> 希望对你有帮助。


感谢您的快速回复。如何检查两个服务器是否设置为链接服务器?我可以设置另一个服务器吗? 由于需要定期通过存储过程完成此操作,因此我无法使用向导选项。 - satya
我已经编辑了我的答案,并添加了一些额外的信息,谢谢Barry。 - codingbadger
对于那些稍后阅读此文的用户,我通过艰难的方式发现(至少在 SQL 2008 R2 中),您无法通过链接服务器在表上启用“IDENTITY_INSERT”。 - Jon Seigel
@JonSeigel:我认为你需要创建一个动态SQL语句,并使用sp_executeSQL存储过程在链接服务器上执行它。 - codingbadger
我了解到一种技术,它将所需的查询作为参数传递给一个穿透式存储过程...但是这并不起作用。问题在于当SQL执行远程查询时,它会创建一个新连接,但不会传递任何连接选项。由于IDENTITY_INSERT是每个连接的,因此它不会被传播。 - Jon Seigel

1
我猜想,可能有点晚回答这个问题 :-),但如果两台服务器没有设置为联接服务器,您可以尝试使用SSIS。

0

您可以在 SSMS 中设置联接服务器并执行跨服务器查询。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接