我有几百张表(当前是466张,但现在还在增长),我必须将它们从一台服务器复制到另一台服务器。

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

这是一个较大项目的一部分,我将所有这些Cart<Number>表合并到一个Carts表中,但这是一个完全不同的问题。 >
是否有人可以使用最佳实践方法来复制所有这些表?如果有帮助,两台服务器上的数据库名称相同。正如我前面说的,我拥有sa帐户,因此我可以执行将数据从A传输到B所需的一切。两个服务器也都在同一个服务器场中。

评论

可能感兴趣dba.stackexchange.com/questions/30473/…

#1 楼

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

评论


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

–user507
15年12月1日在17:28

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

– Vini
2015年12月3日,10:19

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

–亚伦·伯特兰(Aaron Bertrand)
15年12月3日在15:01

@AaronBertrand:好的。我也有同样的问题。但是当我导入datetime时也被转换为smalldatetime

– Vini
15年12月4日在6:22

#2 楼

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


#3 楼

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

将数据从一个数据库导入到另一个脚本
<答案答案描述了使用SQLCLR存储过程的过程,该过程利用了.NET中的SqlBulkCopy类。可以在遍历表的游标中使用该存储过程。这样可以轻松地编辑过程以及考虑新表,也可以通过游标查询中的WHERE条件轻松地排除一个或多个表。

#4 楼

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

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