2013-10-02 185 views
0

我有一个SQLite数据库中有一组表。这些表中的所有数据都可以通过一些id分隔成一组组。例如:从其他SQLite数据库创建SQLite数据库C#

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的多个行。还需要为每个表使用一些主键/外键。理想情况下,我们可以把这些较小的表格,然后将它们全部压缩到更大的表格中。

回答

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