Более одной операции вставки в одну таблицу одновременно - PullRequest
1 голос
/ 21 июня 2011

Сначала я объясню, что я делаю, а затем укажу, в чем проблема.

Мое приложение получает XML file от аутентифицированного пользователя через (загрузчик файлов), затем я сопоставляю (я имею в виду миграцию) данные, хранящиеся в файле XML, с аналогичными данными в моей базе данных. Я получаю данные из файла XML через LINQ.

  • Мой первый вопрос

    Каждый элемент в XML-файл имеет эквивалентную сущность в моей базе данных. Что является лучшим и более производительный способ вставить более одной записи в конкретная таблица и гарантировать, что если что-то не так в данных, откат всей операции? Есть ли пример того, как это сделать этот? Есть ли у вас какие-либо предложения относительно проверка данных XML?

  • Мой второй вопрос:

    В первом вопросе я говорю о операция (INSERT). Если пользователь изменяет некоторые данные в XML файл, то я хочу обновить свой база данных с новыми данными. Как я должен сделай это? Должен ли я сравнить каждый записать или попытаться вставить и, если это не удается, затем обновить эту запись?

Ответы [ 2 ]

3 голосов
/ 21 июня 2011

каждый элемент в файле XML имеет эквивалентную сущность в моей базе данных.Каков наилучший и более производительный способ вставить более одной записи в конкретную таблицу. И гарантировать, что в данных что-то не так, откатить всю операцию. Пожалуйста, если есть пример для этого. И любые предложения, касающиесяпроверка данных XML.

Простой ответ здесь: используйте транзакцию.Смысл транзакций состоит в том, чтобы предоставить вам механизм, с помощью которого вы можете выполнить несколько команд, а затем либо зафиксировать их как одну единицу работы, либо полностью откатить их, чтобы база данных оставалась в состоянии, как будто ваши операции никогда не выполнялись..

В первом я говорю об операции (INSERT), если пользователь изменяет некоторые данные в файле XML, то я хочу обновить свою базу данных новыми данными. Как это сделать?Должен ли я сравнить каждую запись.или попытаться вставить, если произошел сбой, а затем обновить эту запись?.

Шаблон повторных попыток с попыткой ошибки не желателен, если его можно легко избежать.Ваш SQL должен либо использовать оператор, предназначенный для условной вставки или обновления в зависимости от существующих данных (например, команда SQL Server MERGE; у меня нет опыта работы с Informix, поэтому я не могу говорить о том, что он поддерживает, или если MERGE - это ANSI SQL), или вы должны выполнить эту условную логику самостоятельно в SQL.

1 голос
/ 22 июня 2011

Используйте для этого хранимую процедуру 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

...