Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SSIS数据流vs自定义传输脚本vs批量插入_C#_Sql Server 2008_Ssis - Fatal编程技术网

C# SSIS数据流vs自定义传输脚本vs批量插入

C# SSIS数据流vs自定义传输脚本vs批量插入,c#,sql-server-2008,ssis,C#,Sql Server 2008,Ssis,将视图的结果从一台服务器上的数据库复制到新服务器(均运行SQL server 2008)上的另一个数据库时,以下哪种方法可能最有效 1。具有OLE DB源/目标的SSIS数据流任务 2。自定义脚本 e、 g 3。SSIS批量插入 我看不出这与使用自定义脚本有什么不同,但没有增加的灵活性,它只适用于表/视图,而不适用于存储过程 我意识到这与同类比较不太相似,因为各种选项都提供了额外级别的日志记录和错误处理等功能,但让我们假设我不需要任何日志记录就可以尝试尽可能公平地竞争。根据,大容量插入比Sq

将视图的结果从一台服务器上的数据库复制到新服务器(均运行SQL server 2008)上的另一个数据库时,以下哪种方法可能最有效

1。具有OLE DB源/目标的SSIS数据流任务

2。自定义脚本

e、 g

3。SSIS批量插入

我看不出这与使用自定义脚本有什么不同,但没有增加的灵活性,它只适用于表/视图,而不适用于存储过程



我意识到这与同类比较不太相似,因为各种选项都提供了额外级别的日志记录和错误处理等功能,但让我们假设我不需要任何日志记录就可以尝试尽可能公平地竞争。

根据,大容量插入比SqlBulkCopy性能更好。然而,根据post的说法,数据流任务比批量插入SSIS任务更可取

这并不是直接回答您的问题,而是

对您的问题的简短回答可能是使用具有代表性的数据集尝试不同的方法,并亲自查看。这将为您提供一个比SO上任何人都能提供的对您的环境更有意义的答案,同时也是了解每个选项所涉及的工作和问题的好方法

较长的答案是SSIS批量插入任务很可能是最慢的,因为它可以。为了使用它,您必须先将数据导出到源服务器上的文件,然后再将其重新加载到目标服务器上。如果服务器之间的WAN连接速度非常慢,那么这可能非常有用,因为可以在复制文件之前压缩文件,以最大限度地减少数据量,否则只会增加更多的工作量


至于SSIS和
SqlBulkCopy
之间的区别,我个人对
SqlBulkCopy
没有任何经验,因此我只能建议,如果没有明确的“赢家”,那么首先使用最简单、最容易维护的实现,在实际需要之前,不要担心找到最快的解决方案。代码只需要运行得足够快,而不是尽可能快,而且从您的问题中还不清楚您是否确实存在性能问题

“最有效”是什么意思?最短的开发时间?最快的执行?最少的代码行数?CPU、RAM或I/O使用率最低?最容易调试?最容易维护?对不起,我指的是执行效率(最快的时间和最低的CPU、RAM和IO使用)。
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);
        }
    }
}