Sql server SQL批量数据插入或更新
好了,就这样。我面临的要求是数据库中有一个表,比如“MyDbTable”,其中包含大量数据 假设它有三列,如: 可乐 1aabSql server SQL批量数据插入或更新,sql-server,c#-4.0,Sql Server,C# 4.0,好了,就这样。我面临的要求是数据库中有一个表,比如“MyDbTable”,其中包含大量数据 假设它有三列,如: 可乐 1aab 2bbc3ccd 可乐是身份 现在我调用一个webservice,预期结果包含大约1500行 架构与返回的结果相同,例如: 可乐 1axy 3cyz 4cyz 现在我真正想做的是检查服务结果中的现有记录,并在MyDbTable中更新它们,在这种情况下,将是ColA中包含1和3的记录。我将不得不更新它们。因为webservice结果中ColA值为4的记录是新的,所以我必
2bbc
3ccd
可乐是身份 现在我调用一个webservice,预期结果包含大约1500行 架构与返回的结果相同,例如: 可乐 1axy
3cyz
4cyz 现在我真正想做的是检查服务结果中的现有记录,并在MyDbTable中更新它们,在这种情况下,将是ColA中包含1和3的记录。我将不得不更新它们。因为webservice结果中ColA值为4的记录是新的,所以我必须插入它 现在的问题是MyDbTable有数千行,而服务也返回许多行 我知道最简单的方法是蛮力,我们迭代每个记录,检查它,然后通过应用程序或存储过程处理它
我真正想知道的是如何以最优化的方式完成这项工作。你可以做一件事 从web服务中获取第一行,并将其ID标注为“1”,然后将其传递给GetRecordFromDB方法 现在,如果该方法返回某个对象,则从您从Webservice中找到的值中设置它的值。。然后调用一个方法来更新数据库中的记录 所以代码逻辑是
object updateorinsert = library.getobjectbyid(IDFROMFirstRecordOfWebservice)
if (updateorinsert != null)
{
updateorinsert.ColAValue = WebserviceData.ColAValue
}
updateorinsert.ColBValue = WebserviceData.ColBValue
updateorinsert.ColCValue = WebserviceData.ColCValue
library.UpdateRecordOrInsertInDB(updateorinsert);
您还可以使用SqlBulkCopy,并使用staging表执行Inser/Update,以满足您的所有需要
您可以这样做,在BulkInsert之后,应该删除暂存表和实际表中的所有ID,然后将所有记录从暂存复制到实际
我希望上面的链接能有所帮助。这是我认为最有效的方法(但尚未衡量):
如果您使用的是早于2008年的SQL Server版本,您可以使用而不是
合并
谢谢您的回答,这非常正确,但是我必须重复整个记录集,我真的不想这样做。我非常怀疑这是实现这一目标的最佳方式。无论如何,谢谢你。