批量插入现有表 - 仅插入新行

时间:2014-06-23 08:20:48

标签: c# sql-server sqlbulkcopy

我有一种方法从DataTable中的数据库中的现有表中获取数据,并且我想向该数据表添加新行,然后使用SQLBulkCopy仅批量插入新添加的行而不是已存在的行,我需要以某种方式配置它还是只添加新行?

var myDataTable = GetExistingTableDataAsDataTable();

//向myDataTable添加新行.....

using (var conn = new SqlConnection("Connection string"))
    {
        conn.Open();

        using (var bulk = new SqlBulkCopy(conn))
        {
            bulk.DestinationTableName = myDataTable.TableName;
            bulk.BatchSize = 1000;

            foreach (var column in myDataTable.Columns)
            {
                bulk.ColumnMappings.Add(column.ToString(), column.ToString());   
            }

            bulk.WriteToServer(myDataTable); //Do i need to add DataRowState.Added here?
            bulk.Close();
        }

        conn.Close();
    }

1 个答案:

答案 0 :(得分:1)

使用临时表格bulk insert。然后,运行查询以复制新行,使用where子句过滤掉重复项:

insert  YourTable
        (id, col1, col2, col3, ...)
select  id
,       col1
,       col2
,       col3
,       ...
from    TempTable t
where   not exists
        (
        select  *
        from    YourTable yt
        where   yt.id = t.id
        )