Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Sql server SQL批量数据插入或更新_Sql Server_C# 4.0 - Fatal编程技术网

Sql server SQL批量数据插入或更新

Sql 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的记录是新的,所以我必

好了,就这样。我面临的要求是数据库中有一个表,比如“MyDbTable”,其中包含大量数据

假设它有三列,如:

可乐

1aab
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,然后将所有记录从暂存复制到实际

我希望上面的链接能有所帮助。

这是我认为最有效的方法(但尚未衡量):

  • 使用诸如提供的批量复制操作,将从web服务返回的整个表复制到数据库的临时表中

  • 使用单个SQL Server从临时表到实际表执行“更新或插入”操作


  • 如果您使用的是早于2008年的SQL Server版本,您可以使用而不是
    合并

    谢谢您的回答,这非常正确,但是我必须重复整个记录集,我真的不想这样做。我非常怀疑这是实现这一目标的最佳方式。无论如何,谢谢你。