将视图的结果从一台服务器上的数据库复制到新服务器上的另一台数据库(都运行SQL Server 2008)时,下列哪种方法可能最有效?
1。使用OLE DB源/目标
的SSIS数据流任务
2。自定义脚本
e.g。
using (SqlConnection connection = new SqlConnection(sourceConnectionString))
using (SqlCommand command = new SqlCommand(sourceQuery, connection))
{
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnectionString))
{
bulkCopy.DestinationTableName = destinationTable;
//Any Column mapping required
bulkCopy.WriteToServer(reader);
}
}
}
第3。 SSIS批量插入
我没有看到这与使用自定义脚本有什么不同,但没有增加的不灵活性,它只适用于表/视图而不是存储过程。
我意识到这不像是比较相似,因为各种选项都有额外的日志记录和错误处理等级,但我们假设我根本不需要记录来尽量使游戏场尽可能
答案 0 :(得分:3)
根据this SO Post,BULK INSERT的性能优于SqlBulkCopy。但是,根据this帖子,DataFlow任务优先于批量插入SSIS任务
答案 1 :(得分:3)
这并不是直接回答你的问题,而是......
对您的问题的简短回答可能是尝试使用代表性数据集的不同方法并亲自查看。这将为您提供一个对您的环境更有意义的答案,而不是SO所能提供的任何人,也是了解每个选项所涉及的工作和问题的好方法。
更长的答案是SSIS批量插入任务很可能是最慢的,因为它可以only load flat file data。为了使用它,您必须在将数据重新加载到目标服务器上之前将数据导出到源服务器上的文件中。如果服务器之间的WAN连接速度非常慢,那么这可能很有用,因为您可以在复制之前压缩文件以最小化数据量,否则它只会增加更多工作。
至于SSIS和SqlBulkCopy
之间的区别我没有SqlBulkCopy
的个人经验,所以我只能建议如果没有明确的'赢家',那么你最简单,最容易维护的实施首先,不要担心找到最快的解决方案,直到你真正需要。代码只需要运行得足够快,而不是尽可能快,并且从您的问题中不清楚您实际上是否存在性能问题。