一次在同一个表中执行多个插入操作

本文关键字:执行 操作 插入 同一个 一次 | 更新日期: 2023-09-27 17:59:57

我将首先解释我要做什么,然后指定问题所在。

我的应用程序通过(文件上传器)从经过身份验证的用户那里获得XML file,然后我将存储在XML文件中的数据映射(我的意思是迁移)到数据库中的等效数据。我通过LINQ从XML文件中获取数据。

  • 我的第一个问题

    中的每个元素XML文件具有等效实体在我的数据库中。什么是最好的和更高效的插入方式中的多个记录具体表格,并保证数据中有问题,是否回滚整个操作?有没有一些如何做的例子这你对验证XML数据?

  • 我的第二个问题:

    在第一个问题中,我谈到(INSERT)操作。如果用户更改XML中的一些数据文件,然后我想更新带有新数据的数据库。我该怎么办做这个?我应该比较一下吗记录,或尝试插入,如果失败,然后更新此记录?

一次在同一个表中执行多个插入操作

XML文件中的每个元素都有一个我的数据库中的等效实体。什么是最好、性能更好的方式在具体表格。如果有,请保证数据中有什么错误,请回滚整个操作如果有一些样本可以做到这一点关于验证的任何建议XML数据。

这里的简单答案是:使用事务。事务的目的是为您提供一种机制,通过该机制,您可以执行多个命令,然后将它们作为一个工作单元提交,或者将它们完全回滚,使数据库处于从未进行过操作的状态。

在第一个中,我谈到(INSERT)操作,如果用户更改XML文件中的一些数据,然后我想用新的更新我的数据库数据。这个怎么样。我应该比较一下吗每个记录。或在失败时尝试插入然后更新此记录?。

如果可以很容易地避免的话,尝试-错误-不同的重试模式是不可取的。您的SQL应该使用一个语句,该语句被设计为根据现有数据有条件地插入或更新(例如SQL Server MERGE命令;我没有Informix的经验,所以我不能谈论它支持什么,或者MERGE是否是ANSI SQL),或者您应该在SQL中自己执行此条件逻辑。

为此使用informix存储过程。这将允许您包含用于处理坏数据的异常处理。

然后,您可以先将所有实体加载到临时表中,比如t_work,如果存在数据问题,则删除该表并引发异常。

BEGIN -- Start Exception Handling
  ON EXCEPTION SET esql, eisam
  DROP TABLE t_work;
  RAISE EXCEPTION esql, eisam; -- rethrow the exception
  END EXCEPTION
    -- << Your logic here>>

请参阅此处了解更多详细信息:http://www.pacs.tju.edu/informix/answers/english/docs/dbdk/infoshelf/sqlt/14.toc.html#540217