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