从一台服务器复制(数百个)表到另一台服务器(使用SSMS)


27

我必须将几百张表(当前为466张,但仍在增长)从一台服务器复制到另一台服务器。

我以前从来没有做过此事,所以我完全不确定如何处理它。所有表格的格式相同:Cart<Eight character customer number>

这是一个较大的项目的一部分,我将所有这些Cart<Number>表合并到一个Carts表中,但这是一个完全不同的问题。

有没有人有我可以用来复制所有这些表的最佳实践方法?如果有帮助,两台服务器上的数据库名称相同。就像我之前说的,我拥有该sa帐户,因此我可以执行将数据从A传输到B所需的一切。两个服务器也都在同一个服务器场中。


Answers:


21

您可以使用SQL Server Management Studio的“导出数据”任务。右键单击SSMS中的数据库,选择“任务”,然后选择“导出数据”。它将启动一个交互式向导,该向导将允许将表从一台服务器复制到另一台服务器,尽管您必须自己重新创建索引。该向导会创建一个临时的SSIS程序包(尽管您也可以选择保存它)并且相对较快。


4
如果感兴趣的话,还可以通过PowerShell执行相同的导出任务。执行此操作的类似脚本位于我的答案中:dba.stackexchange.com/a/122149/507
Shawn Melton

为什么导入/导出不复制索引和依赖项?为466个表重新创建索引不是太困难吗?
维尼2015年

@Vini,您还可以使用“生成脚本”向导,该向导确实允许您复制索引(不过,我不知道它是否以正确的依赖顺序可靠地生成了脚本-我一直为此使用RedGate SQL Compare)。
亚伦·伯特兰

@AaronBertrand:好的。我也有同样的问题。但是,当我导入datetime时也将其转换为smalldatetime
Vini 2015年

23

这是一种快速而肮脏的方法,只需要在每个方向上都具有链接服务器,并具有足够的特权,排序规则兼容性和启用的数据访问权限即可。您在源链接服务器上运行此命令,以生成将在目标链接服务器上执行的动态SQL。

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'SELECT * INTO [database].dbo.' + QUOTENAME(name)
  + N' FROM [source_linked_server].[database].dbo.' + QUOTENAME(name) + N';'
FROM sys.tables
WHERE name LIKE N'Cart[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]';

PRINT @sql; -- this will only print 8K, enough to spot check
--EXEC [destination_linked_server].master.sys.sp_executesql @sql;

19

如果您希望在测试和进行较小更改时可以轻松重新运行可脚本化的内容,请在此处查看我的答案:

将数据从一个数据库导入到另一个脚本

该答案描述了使用SQLCLR存储过程的过程,该过程利用了SqlBulkCopy.NET 中的类。可以在遍历表的游标中使用该存储过程。这允许轻松地编辑过程以及考虑新表,或通过WHERE游标查询中的条件轻松地排除一个或多个表。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.