在SQLite中更新多个相关表

时间:2010-04-01 23:47:57

标签: sqlite system.data.sqlite

只是一些背景,抱歉这么久了。

我正在使用System.Data.SQLite ADO.net适配器来创建本地sqlite数据库,这将是唯一一个命中数据库的进程,所以我不需要担心并发。

我正在从各种来源构建数据库,并且不希望使用数据集或数据适配器或类似的东西在内存中构建所有数据库。我想用SQL(DdCommands)来做这件事。我不太喜欢SQL和sqlite中的完整noob。我基本上使用sqlite作为本地数据库/保存文件结构。

数据库有很多相关的表格,数据与人或地区或地区无关,但想用一个简单的类比,想象一下:

具有自动增量RegionID,RegionName列和各种可选列的Region表。

具有自动增量区域ID,区域名称,RegionId和各种可选列的区域表

具有自动增量PersonID,PersonName,DistrictID和各种可选列的人员表

所以我得到一些表示RegionName,DistrictName,PersonName和其他Person相关数据的数据。此时可能会或可能不会创建区域,区域和/或人员。

再一次,这不是最伟大的,我的想法将是:

  • 检查区域是否存在,如果是,则获取RegionID
  • else创建它并获取RegionID
  • 检查区域是否存在,如果是,则获取区域ID
  • 其他创建它从上面添加RegionID并获得DistrictID
  • 检查是否存在Person,如果是,则获取PersonID
  • 其他创建它从上面添加DistrictID并获取PersonID
  • 使用其余数据更新人员。

在MS SQL Server中,我将创建一个存储过程来处理所有这些。

我只能通过sqlite看到这样做是很多命令。所以我相信我没有得到这个。我花了好几个小时在各个网站上四处看看,但感觉不到我正走在正确的道路上。任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:2)

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());