关于sql:从应用程序中插入/更新/删除数据库中的多个记录的最佳方法是什么?

关于sql:从应用程序中插入/更新/删除数据库中的多个记录的最佳方法是什么?

What's the best way to insert/update/delete multiple records in a database from an application?

给定一小部分实体(例如10个或更少),可以在应用程序中进行插入,删除或更新,执行必要的数据库操作的最佳方法是什么? 是否应该发出多个查询,每个受影响的实体一个? 还是应该使用数据库引擎可以解析的某种XML构造,以便只需要发出一个命令?

我之所以这么问,是因为我目前的商店中常见的一种模式是格式化包含所有更改的XML文档,然后将该字符串发送到数据库以由数据库引擎的XML功能处理。 但是,鉴于要执行的任务的简单性质,以这种方式使用XML似乎很麻烦。


这取决于您需要执行的操作数量以及运行所需的速度。如果只有少数几个,那么使用您执行单项操作所采用的任何机制一次执行一次即可。

如果您需要执行成千上万次操作,并且需要快速运行,则应重新使用连接和命令,并在每次迭代期间将参数的参数更改为查询的参数。这将最大限度地减少资源使用。您不想为每个操作重新创建连接和命令。


您没有提到正在使用的数据库,但是在SQL Server 2008中,可以使用表变量将这样的复杂数据传递给存储过程。在那里解析并执行您的操作。有关更多信息,请参见Scott Allen关于ode to code的文章。


答案取决于您正在谈论的数据量。如果您在内存中只有很少的一组记录需要同步回磁盘,则可能需要多个查询。如果数据量更大,则需要查看其他选项。

最近,我必须实现一种机制,其中外部数据源给了我约17,000行dta,这是我与本地表同步所需的。我选择的解决方案是将外部数据加载到临时表中,然后调用一个存储的proc,该proc完全在数据库中进行了同步。


从"业务实体"设计的角度来看,如果您要对一组实体中的每个实体执行不同的操作,则应让每个实体处理自己的持久性。

如果存在常见的批处理活动(例如,"删除所有早于x日期的内容"),我将在执行批处理更新或删除的集合类上编写静态方法。我通常让实体原子地处理自己的插入。


大多数数据库支持BULK UPDATE或BULK DELETE操作。


推荐阅读

    linux默认命令删除?

    linux默认命令删除?,系统,软件,名称,档案,命令,文件,目录,不了,电脑,文件夹,

    linux删除空行命令?

    linux删除空行命令?,名称,不了,命令,文件夹,文件,时间,工作,简介,情况,资料,l

    linux删除软件命令?

    linux删除软件命令?,软件,系统,命令,不了,名称,数据,文件夹,文件,工具,百度,l

    linux删除集群命令?

    linux删除集群命令?,软件,管理,工具,平台,工作,系统,技术,数据,公司,产品,在l

    linux输入命令删除键?

    linux输入命令删除键?,名称,系统,档案,命令,文件,目录,不了,数据,文件夹,终

    linux删除群组的命令?

    linux删除群组的命令?,系统,管理,工作,名称,命令,地址,邮箱,基础,密码,用户

    删除密码命令linux?

    删除密码命令linux?,密码,系统,管理,电脑,软件,百度,信息,名称,名字,命令,lin

    linux恢复删除命令?

    linux恢复删除命令?,工具,系统,信息,文件,命令,数据,软件,名称,不了,目录,lin

    linux多个命令输入?

    linux多个命令输入?,系统,工具,工作,命令,电脑,地址,信息,软件,服务,连续,Lin

    linux的删除文件命令?

    linux的删除文件命令?,名称,不了,系统,文件夹,命令,文件,环境,档案,目录,指

    linux删除容器命令?

    linux删除容器命令?,系统,名称,不了,档案,命令,文件夹,文件,环境,目录,指令,l

    linux中vi命令删除?

    linux中vi命令删除?,系统,数字,命令,环境,标的,数据,不了,名称,连续,位置,Lin

    linux服务器删除命令?

    linux服务器删除命令?,系统,服务,管理,情况,命令,工作,互动,地址,软件,较大,l

    linux删除命令大全?

    linux删除命令大全?,软件,系统,名称,命令,通用,档案,不了,电脑,文件夹,文件,

    linux删除视图命令?

    linux删除视图命令?,系统,软件,电脑,管理,地方,环境,地址,检测,情况,名称,ubu

    替换删除linux命令?

    替换删除linux命令?,系统,不了,名称,档案,文件,命令,文件夹,目录,数据,字符

    linux删除任务命令行?

    linux删除任务命令行?,软件,系统,名称,命令,文件,电脑,通用,定期,目录,文件

    linux删除空格命令?

    linux删除空格命令?,系统,工作,名称,地址,环境,命令,空格,文件,标准,设备,lin

    linux删除系统的命令?

    linux删除系统的命令?,系统,命令,环境,数据,名称,不了,文件,文件夹,档案,目

    linux删除硬链接命令?

    linux删除硬链接命令?,工作,数据,系统,信息,链接,命令,设备,名称,不了,概念,l