Обновление нескольких связанных таблиц в SQLite - PullRequest
0 голосов
/ 02 апреля 2010

Просто немного предыстории, извините, что так долго.

Я использую адаптер ADO.net System.Data.SQLite для создания локальной базы данных sqlite, и это будет единственный процесс, работающий с базой данных, поэтомуМне не нужно беспокоиться о параллелизме.

Я строю базу данных из разных источников и не хочу встраивать все это в память, используя наборы данных или адаптеры данных или что-то подобное.Я хочу сделать это с помощью SQL (DdCommands).Я не очень хорошо с SQL и полный нуб в sqlite.Я в основном использую sqlite как локальную базу данных / структуру файла сохранения.

База данных имеет много связанных таблиц, и данные не имеют ничего общего с людьми, регионами или районами, но если использовать простую аналогию,представьте себе:

Таблица регионов с автоматическим приращением RegionID, столбец RegionName и различными необязательными столбцами.

Таблица районов с автоматическим приращением DistrictID, DistrictName, RegionId и различными необязательными столбцами

Personтаблица с автоматическим приращением PersonID, PersonName, DistrictID и различными необязательными столбцами

Таким образом, я получаю некоторые данные, представляющие RegionName, DistrictName, PersonName и другие данные, связанные с Person.Регион, Район и / или Лицо могут или не могут быть созданы в этой точке.

Еще раз, не будучи величайшим с этим, мои мысли будут выглядеть примерно так:

  • Проверьте, существует ли Region, и если да, получите RegionID
  • иначе создайте его и получите RegionID
  • Проверьте, существует ли District, и если да, получите DistrictID
  • , иначе создайте его, добавив его в RegionID сверху, и получите DistrictID
  • Проверьте, чтобы увидетьесли Person существует, и если это так, получите PersonID
  • , в противном случае создайте его, добавив его в DistrictID сверху, и получите PersonID
  • Обновите Person с остальными данными.

В MSSQL Server Я хотел бы создать хранимую процедуру для обработки всего этого.

Единственный способ увидеть, как это сделать с помощью sqlite - это множество команд.Так что я уверен, что не понимаю этого.Я часами осматривал разные сайты, но просто не чувствую, что иду по правильному пути.Любые предложения будут с благодарностью.

1 Ответ

2 голосов
/ 02 апреля 2010

Используйте last_insert_rowid() в сочетании с INSERT OR REPLACE. Что-то вроде:

INSERT OR REPLACE INTO Region (RegionName)
                       VALUES (:Region   );

INSERT OR REPLACE INTO District(DistrictName, RegionID           )
                        VALUES (:District   , last_insert_rowid());

INSERT OR REPLACE INTO Person(PersonName, DistrictID           )
                      VALUES (:Person   , last_insert_rowid());
...