SqlBulkCopy vs SSIS

问题描述 投票:0回答:1

我正在尝试编写一个程序来对另一个表执行大表(大约20亿条记录)。在我看来,SqlBulkCopy将需要等待,直到在插入之前从SqlDataReader中读取所有数据为止。如果在SSIS中使用相同的查询和表,则SSIS立即启动,并且可以看到从目标表插入的数据。

我编码正确吗?如何使其与SSIS相似?

                using (SqlConnection conn = new SqlConnection(connectionString))
                {
                    conn.Open();
                    using (SqlCommand cmd = new SqlCommand(bukCopyData.SourceQuery, conn))
                    {
                        cmd.CommandTimeout = 0;
                        using (SqlDataReader reader = cmd.ExecuteReader())
                        {
                            performBulkCopy(connectionStringDest, DestinationTable, reader);
                        }
                    }
                }
        private void performBulkCopy(string connectionString, string destinationTable, SqlDataReader reader)
        {
            using (SqlBulkCopy sbc = new SqlBulkCopy(connectionString,
                SqlBulkCopyOptions.KeepIdentity | SqlBulkCopyOptions.CheckConstraints | SqlBulkCopyOptions.KeepNulls
                ))
            {
                sbc.DestinationTableName = destinationTable;
                sbc.BatchSize = 102400;
                sbc.BulkCopyTimeout = 0;
                try
                {
                    sbc.WriteToServer(reader);
                } catch (Exception e)
                {
                    throw;
                } finally
                {
                    reader.Close();
                }


            }

        }

    }
c# sqlbulkcopy
1个回答
0
投票

实际上,EnableStreaming属性似乎起作用。我必须确保查询中的列顺序与目标表匹配。不知道为什么需要很长时间才能引发错误。

© www.soinside.com 2019 - 2024. All rights reserved.