【问题标题】:Create SQLite Database From Other SQLite Database C#从其他 SQLite 数据库 C# 创建 SQLite 数据库
【发布时间】:2013-10-02 01:20:51
【问题描述】:

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

【问题讨论】:

    标签: c# sql sqlite


    【解决方案1】:

    可以组合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);
    

    【讨论】:

      猜你喜欢
      • 2019-03-22
      • 2023-03-15
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2013-02-23
      相关资源
      最近更新 更多