在SQL Server中的数据库之间复制行

时间:2010-11-03 00:32:36

标签: sql sql-server

将大量行从一个数据库中的表复制到另一个具有完全相同结构的数据库中的表的最有效方法是什么?

6 个答案:

答案 0 :(得分:18)

如果数据库位于同一台服务器上,那么这很简单 - 就像你在同一个数据库中的表之间进行复制一样,即:

INSERT INTO targetdatabase..targettable (col1, col2, col3, col4)
    SELECT col1, col2, col3, col4 FROM sourcedatabase..sourcetable

如果数据库位于不同的服务器上,您需要查看使用OPENQUERY,OPENROWSET或链接服务器之一来进行查询,但从根本上说,即使是所有这些,您仍然要编写命令的变体上方。

或者,这是一个BCP out和BCP in或使用SQL Server Management Studio的数据传输向导。

答案 1 :(得分:14)

如果你的日志IO子系统允许它,那么:

INSERT INTO target(field1, field2, field3)
SELECT field1, field2, field3 FROM source;

但是在一个语句中进行整个传输意味着一个事务,这意味着必须在整个语句中生成x2.5数据大小日志并保持。 IE浏览器。如果传输50Gb,目标数据库日志将增长到250Gb(即使恢复模式设置为简单!)。

如果您担心日志,那么您必须批量转移。您仍然可以执行INSERT ... SELECT技巧,但您的SELECT必须使用一些键范围和批次可接受的行数。

最终,你总是可以bcp out后跟bcp in,它会很快运行,可能是获得可靠转移的最快方式。

答案 2 :(得分:3)

一种简单的方法是打开SSMS并右键单击数据库并转到任务>导入数据并按照向导设置源和目标。

这样,如果数据存在于不同的系统上,即使您希望更改结构,也可以这样做。

同时从目的地追加或清除数据。

答案 3 :(得分:1)

Insert into targetdatabase.dbo.tablename
select * from sourcedatabase.dbo.tablename

注意: .dbo很重要

如果源表和目标表中的列不同,则显式提及两个表的列。请记住数据类型应该相同

答案 4 :(得分:0)

答案 5 :(得分:0)