Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.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# 如何从my C应用程序高效地执行SQL Server数据库更新_C#_Sql - Fatal编程技术网

C# 如何从my C应用程序高效地执行SQL Server数据库更新

C# 如何从my C应用程序高效地执行SQL Server数据库更新,c#,sql,C#,Sql,我正试图找出设计我的C应用程序的最佳方法,该应用程序利用SQL Server后端的数据 我的应用程序必须定期从应用程序中的一个循环中每次更新55K行。在执行更新之前,需要检查要更新的记录是否存在 如果存在,则更新一个字段。 如果没有,则执行4个字段的插入 要更新的表有600K行 从我的应用程序中处理这些更新/插入的最有效方法是什么? 我应该用c语言创建一个数据字典,加载600K记录并首先查询字典而不是数据库吗? 这是一种更快的方法吗? 我应该使用存储过程吗? 基于此场景,实现最高性能的最佳方法是

我正试图找出设计我的C应用程序的最佳方法,该应用程序利用SQL Server后端的数据

我的应用程序必须定期从应用程序中的一个循环中每次更新55K行。在执行更新之前,需要检查要更新的记录是否存在

如果存在,则更新一个字段。 如果没有,则执行4个字段的插入

要更新的表有600K行

从我的应用程序中处理这些更新/插入的最有效方法是什么? 我应该用c语言创建一个数据字典,加载600K记录并首先查询字典而不是数据库吗? 这是一种更快的方法吗? 我应该使用存储过程吗? 基于此场景,实现最高性能的最佳方法是什么?
您应该尽量避免每次从循环中更新55K行。这将是非常缓慢的

相反,试着找到一种方法一次批处理n个更新。作为将一组数据发送到存储过程的一种方式,查看


这里有一篇关于使用TVPs更新多行的文章:

您可以使用它上载到临时表,然后让SQL Server作业执行合并。

如果您执行类似操作,该怎么办

通过某种方式,将55000行数据输入数据库;如果他们不在那里。如果您现在正从某个查询中获取这些行,请将查询结果存储在该数据库的临时表中。这可能是存储过程的适当应用程序

现在,您可以将需要执行的操作表示为两个单独的SQL查询:一个用于更新,另一个或多个用于插入。第一个查询可能会使用一个子句,例如@TEMP_TABLE的选择栏中的WHERE FOO。。。标识要更新的行。其他人可能会在FOO不在的地方使用


准确地说,这正是我希望使用存储过程来完成的事情,因为仔细想想,SQL server本身正是做这项工作的合适的一方,因为他是唯一一个手头上已经有您想要操作的数据的人。光是他一个人不需要把那55000行传输到任何地方。很好。

这是否是由于某些用户交互造成的?如果是这样的话,那么不妨看看业务规则是否允许由于在非工作时间将流程作为某些计划服务的一部分运行而引入一些延迟。无论哪种方式,如果存在瓶颈,您仍然希望优化性能。最近提出的问题,请参阅此处: