Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.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# 使用带有列映射的datatable更新/插入SQL表_C#_Sql_Insert_Datatable_Sqlbulkcopy - Fatal编程技术网

C# 使用带有列映射的datatable更新/插入SQL表

C# 使用带有列映射的datatable更新/插入SQL表,c#,sql,insert,datatable,sqlbulkcopy,C#,Sql,Insert,Datatable,Sqlbulkcopy,我想将数据从一个数据库批量复制到另一个数据库。它需要具有足够的动态性,以便当源数据库的用户创建新字段时,目标端(my end!)的更改最小 我使用sqlbulkcopy函数完成了这项工作,使用在单独的表中设置的列映射,因此,如果创建了任何新内容,我只需创建新字段并设置映射(无代码或存储过程更改): 但是,要求现在已经改变。 我需要在这个表的其他列中保留更多来自其他地方的数据,这意味着我不能截断整个表并使用sqlbulkcopy编写所有内容。现在,我需要能够插入新记录或更新当前记录的相关字段,但仍

我想将数据从一个数据库批量复制到另一个数据库。它需要具有足够的动态性,以便当源数据库的用户创建新字段时,目标端(my end!)的更改最小

我使用sqlbulkcopy函数完成了这项工作,使用在单独的表中设置的列映射,因此,如果创建了任何新内容,我只需创建新字段并设置映射(无代码或存储过程更改):

但是,要求现在已经改变。
我需要在这个表的其他列中保留更多来自其他地方的数据,这意味着我不能截断整个表并使用sqlbulkcopy编写所有内容。现在,我需要能够插入新记录或更新当前记录的相关字段,但仍然具有足够的动态性,以便在用户创建新字段时不需要更改代码


有人有什么想法吗?

对mdisibio的原始问题发表评论-看起来SQL MERGE语句就是答案。

区分问题的两部分:1)动态列映射和2)如何插入和/或更新而不是截断/大容量复制:插入/更新最好由
MERGE
语句。它非常灵活,因为您可以定义源和目标,所以可以使用列映射数据动态编写完整的sql。或者,您可以使用当前方法将源数据大容量插入临时表,然后调用一个过程(添加新列时可能需要更新该过程),将其与需要保留的生产表合并。谢谢您的评论。我看了一下merge语句,它似乎可以帮我完成这项工作。不幸的是,需求和优先级又发生了变化,所以现在它被搁置了。再次感谢!
foreach (var mapping in columnMapping)
{
    var split = mapping.Split(new[] { ',' });
    sbc.ColumnMappings.Add(split.First(), split.Last());
}

try
{
    sbc.WriteToServer(sourcedatatable);
}