SQL Server 批量导入 bulk insert

在我们开发过程中,有时会遇到百万级别甚至更多的数据导入。比如我们需要将一百万条数据从csv文件导入到数据库中,此时,如果我们使用普通的 INSERT 语句执行,会非常影响效率,因为每插入一条数据,数据库都需要完整的走一遍 日志啦等等流程。使用bulk insert 会帮助我们提高效率。

我们可以使用 C# 中的 SqlBulkCopy。在这里我提供一个实例供大家参考。我们定义的 vocabularyLookupTable 的字段和类型应该与数据库中的定义一致。

var vocabularyLookupTable = new DataTable();
            vocabularyLookupTable.Columns.AddRange(
                new[]
                {
                    new DataColumn("VocabularyLookupKey", typeof(Guid)),
                    new DataColumn("CustomerSystemName", typeof(string)),
                    new DataColumn("CustomerTableName", typeof(string)),
                    new DataColumn("CustomerColumnName", typeof(string)),
                });
            var vocabularyLookupRow = vocabularyLookupTable.NewRow();
            vocabularyLookupRow["VocabularyLookupKey"] = key;
            vocabularyLookupRow["CustomerSystemName"] = "MIHMS";
            vocabularyLookupRow["CustomerTableName"] = "PUB_CLM_claimpharm";
            vocabularyLookupRow["CustomerColumnName"] = "ndckey";
            vocabularyLookupTable.Rows.Add(vocabularyLookupRow); 

var connectionBuilder = new SqlConnectionStringBuilder
            {
                DataSource = ".",
                InitialCatalog = "DatabaseName",
                IntegratedSecurity = true,
                Encrypt = false,
                TrustServerCertificate = true,
                ConnectTimeout = 100000,
            };
            var sqlConnection = new SqlConnection(connectionBuilder.ToString());
            sqlConnection.Open();
            var transaction = sqlConnection.BeginTransaction();

            var bulkInsertVocabularyLookup = new SqlBulkCopy(
                sqlConnection,
                SqlBulkCopyOptions.Default,
                transaction)
            {
                DestinationTableName = "[InterfaceModule].[VocabularyLookup]",
                BulkCopyTimeout = 100000,
            };
            bulkInsertVocabularyLookup.WriteToServer(vocabularyLookupTable);
            transaction.Commit();

 

上一篇:C#反射


下一篇:基本概念之数据类型及其检测方法(三)