2013-10-02 234 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);