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

Der*_*sar 27 sql-server ssms linked-server sql-server-2012

我有数百个(目前为 466 个,但在不断增加)表,我必须从一台服务器复制到另一台服务器。

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

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

有没有人有我可以用来复制所有这些表的最佳实践方法?如果有帮助,两台服务器上的数据库名称相同。正如我之前所说,我有这个sa帐户,所以我可以做任何必要的事情来将数据从 A 获取到 B。两台服务器也位于同一个服务器群中。

Aar*_*and 24

这是一种快速而肮脏的方法,它只需要一个链接服务器,在每个方向上,具有足够的权限、排序规则兼容性和启用数据访问。您在源链接服务器上运行它以生成将在目标链接服务器上执行的动态 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;
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 21

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

  • 如果有兴趣,也可以通过 PowerShell 执行相同的导出任务。执行此操作的类似脚本在我的回答中:http://dba.stackexchange.com/a/122149/507 (4认同)

Kin*_*hah 19

您可以使用 BCP OUT 和 BULK INSERT INTO 目标数据库。你可以使用这个脚本

您也可以使用SSIS(数据导入/导出)进行数据传输


Sol*_*zky 19

如果您希望可以在测试时轻松重新运行脚本并进行细微更改,请在此处查看我的答案:

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

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