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

时间:2013-10-02 01:20:52

标签: c# sql sqlite

我有一个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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

可以合并INSERTSELECT。 与ATTACHed databases一起,这允许每个表使用一个语句进行复制:

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