SqlBulkCopy列映射500列添加新列

时间:2013-06-05 15:34:35

标签: sql

我搜索了几个与SqlBulkCopy和ColumnMappings相关的帖子,但找不到解决方案。我正在使用C#ASP .NET MS VS 2010和SQL Server 2008 R2。

我一直在使用SqlBulkCopy来加载一个包含DataTable Source数据的登台表。我想在我的SqlBulkCopy对象中添加一个ColumnMappings属性,但由于我有这么多列,我试图避免列出我需要映射到DB staging表中列的所有500多列。

我需要使用ColumnMappings的原因是我必须删除并添加列,因此架构是动态的,这不是一个好的设计,但为了这个目的,我们的内部客户端可以理解风险。

我还将所有列名称捕获到一个集合中。我不认为ColumnMappings方法将集合作为源和目标。

我考虑过编写两个SqlBulkCopy对象来处理这个问题,但不确定它是否可行。另一种选择是使用T-SQL ..

处理此问题的最佳方法是什么,或者您建议我探索哪种解决方案?

 --set the connection string
//
 string strConn = ConfigurationManager.ConnectionStrings["CPDM"].ToString();  
//
SqlConnection scCPDM = new SqlConnection(strConn);
//
//
--create the SqlBulkCopy opbject
//
SqlBulkCopy bulkcopy = new SqlBulkCopy(strConn);
bulkcopy.BulkCopyTimeout = 3000;
bulkcopy.DestinationTableName = "CPDE_STAGING";
//
--need a to map all column mappings + new columns
--looking to do something like this -->  bulkcopy.ColumnMappings.Add(*,*);
--then this ----> bulkcopy.ColumnMappings.Add(new_column,new_table_column);
--for each new column

bulkcopy.WriteToServer(dtNewRaw);

1 个答案:

答案 0 :(得分:2)

我最终使用它并且效果很好。

            //sqlbulkcopy does a blind insert into the db table.
            //we have to add a column mapping property to tell
            //sqlbulkcopy how to map each column from source to destination correctly
            foreach (string sColumn in columnNamesNew)
            {
                string sNewColumn = sColumn.Replace(' ', '_');
                bulkcopy.ColumnMappings.Add(sColumn, sNewColumn);

            }