从其他 SQLite 数据库 C# 创建 SQLite 数据库

本文关键字:数据库 SQLite 创建 其他 | 更新日期: 2023-09-27 18:33:28

>我有一个SQLite数据库,其中有一组表。这些表中的所有数据都可以通过某个 id 隔离成一组集合。例如:

Table A
ID  value1 value2
1   asd    fgh
2   sdf    ghj
Table B
ID  ID2 value4
1   10   vbn
2   11   bnm
Table C
ID2 value5 value6
10  asdfg  qwer
11  tyui   hjkl

其中,每个ID列将映射其他ID,每个ID2将映射到其他ID2

我想利用这个数据库,并生成一系列较小的数据库,每个数据库具有相同的结构,但只包含 1 个ID的数据:

Database1.sqlite

Table A
ID  value1 value2
1   asd    fgh
Table B
ID  ID2 value4
1   10   vbn
Table C
ID2 value5 value6
10  asdfg  qwer

Database2.sqlite

Table A
ID  value1 value2
2   sdf    ghj
Table B
ID  ID2 value4
2   11   bnm
Table C
ID2 value5 value6
11  tyui   hjkl

我可以逐个创建表,通过一系列SELECT语句收集每个ID的所有数据,然后通过一系列INSERT语句添加它,但我认为必须有更好的方法。

我的另一个想法是,我可以创建一系列视图,每个视图将数据隔离为上述格式。从那里,我可以将这些系列的视图编写为 sqlite 文件作为数据库。

我的问题是我的观点生成想法有多现实?是否可以生成一系列模仿每个表结构的视图,但例如ID = 1的位置,然后将这些视图另存为 sqlite 文件?所有这些都需要在 C# 中完成。有没有更好的方法来做我想做的事情?

更多信息这些表可以有多个具有相同 ID 的行。每个表还需要一些主键/外键。理想情况下,我们可以采用这些较小的表,然后在将来将它们全部压缩到一个较大的表中。

从其他 SQLite 数据库 C# 创建 SQLite 数据库

可以将INSERTSELECT结合起来。与 ATTACHed 数据库一起,这允许每个表使用一个语句进行复制:

ATTACH 'C:'some'where'Database1.sqlite' AS db1;
CREATE TABLE db1.A(ID, value1, value2);
CREATE TABLE db1.B(ID, ID2, value4);
CREATE TABLE db1.C(ID2, value5, value6);
INSERT INTO db1.A SELECT * FROM main.A WHERE ID = 1;
INSERT INTO db1.B SELECT * FROM main.B WHERE ID = 1;
INSERT INTO db1.C SELECT * FROM main.C
                  WHERE ID2 IN (SELECT ID2 FROM B WHERE ID = 1);
ATTACH 'C:'some'where'Database2.sqlite' AS db2;
CREATE TABLE db2.A(ID, value1, value2);
CREATE TABLE db2.B(ID, ID2, value4);
CREATE TABLE db2.C(ID2, value5, value6);
INSERT INTO db2.A SELECT * FROM main.A WHERE ID = 2;
INSERT INTO db2.B SELECT * FROM main.B WHERE ID = 2;
INSERT INTO db2.C SELECT * FROM main.C
                  WHERE ID2 IN (SELECT ID2 FROM B WHERE ID = 2);