Chr*_*s J 18
如果数据库位于同一台服务器上,那么它是微不足道的 - 您就像在同一数据库中的表之间进行复制一样,即:
INSERT INTO targetdatabase..targettable (col1, col2, col3, col4)
SELECT col1, col2, col3, col4 FROM sourcedatabase..sourcetable
Run Code Online (Sandbox Code Playgroud)
如果数据库位于不同的服务器上,您需要查看使用OPENQUERY,OPENROWSET或链接服务器之一来进行查询,但从根本上说,即使是所有这些,您仍然会在上面的命令中编写变体.
或者,这是一个BCP输出和BCP或使用SQL Server Management Studio的数据传输向导的情况.
Rem*_*anu 15
如果您的日志IO子系统允许它,那么:
INSERT INTO target(field1, field2, field3)
SELECT field1, field2, field3 FROM source;
Run Code Online (Sandbox Code Playgroud)
但是,在一个语句中进行整个传输意味着单个事务,这意味着必须在整个语句中生成并保留 x2.5数据大小日志.IE浏览器.如果传输50Gb,目标数据库日志将增长到250Gb(即使恢复模式设置为简单!).
如果您担心日志,那么您必须批量转移.您仍然可以执行INSERT ... SELECT技巧,但您的SELECT必须使用一些键范围和批次可接受的行数.
最终,你总是可以做一个bcp out接着一个bcp in,它的工作非常快,可能是得到一个可靠的传输会以最快的方式.
一个简单的方法是打开 SSMS 并右键单击数据库,然后转到任务 > 导入数据,然后按照向导设置源和目标。
这样,如果数据存在于不同的系统上,即使您希望更改结构,也可以这样做。
同时从目的地追加或清除数据。
Insert into targetdatabase.dbo.tablename
select * from sourcedatabase.dbo.tablename
Run Code Online (Sandbox Code Playgroud)
注意: .dbo很重要
如果源表和目标表中的列不同,则显式提及两个表的列。请记住,数据类型应该相同