【问题标题】:How to add specific number of empty rows in sqlite?如何在sqlite中添加特定数量的空行?
【发布时间】:2020-12-24 13:46:37
【问题描述】:

我有一个SQLite 文件,我想添加2550 empty (NULL) 行。

我可以用这段代码添加一个空行

INSERT INTO my_table DEFAULT VALUES

但我需要 2550 行。有什么捷径吗?我不想执行相同的代码 2550 次。

【问题讨论】:

    标签: sql sqlite android-sqlite sql-insert


    【解决方案1】:

    如果您的 SQLite 版本支持它,您可以使用递归 CTE 生成从 1 到 2550 的序列,然后沿该序列插入“空”记录:

    WITH RECURSIVE generate_series(value) AS (
        SELECT 1
        UNION ALL
        SELECT value + 1
        FROM generate_series
        WHERE value + 1 <= 2550
    )
    
    INSERT INTO yourTable (col1, col2, ...)
    SELECT NULL, NULL, ...
    FROM generate_series;
    

    不清楚您要为实际插入指定哪些值(如果有)。如果您在插入中省略了任何列,则默认情况下 SQLite 应分配 NULL 或为该列定义的任何默认值。

    【讨论】:

    • 它成功了,非常感谢蒂姆。你让我的工作变得轻松。
    • 很高兴为您提供帮助:-)
    【解决方案2】:

    如果您的表为空,则使用递归 CTE 获取 2550 行,每行包含 1 到 2550 的整数,并使用它们插入 2550 行:

    WITH cte AS (
      SELECT 1 nr
      UNION ALL
      SELECT nr + 1
      FROM cte
      WHERE nr < 2550
    )
    INSERT INTO my_table(rowid)
    SELECT nr FROM cte 
    

    这样,您使用列rowid 将存储CTE 的整数值,并且无需在INSERT 语句中枚举表的所有列。
    这些列将获得它们的默认值。

    如果您的表格不为空,您可以通过类似的方式从表格 +1 中的最大 rowid 值开始整数:

    WITH cte AS (
      SELECT MAX(rowid) + 1 nr FROM my_table
      UNION ALL
      SELECT nr + 1
      FROM cte
      WHERE nr < (SELECT MAX(rowid) + 2550 FROM my_table)
    )
    INSERT INTO my_table(rowid)
    SELECT nr FROM cte
    

    查看简化的demo(5 行)。

    但由于您还标记了android-sqlite,您可以使用for 循环:

    for (int i = 1; i <= 2550; i++) {
        db.execSQL("INSERT INTO my_table DEFAULT VALUES");
    }
    

    其中dbSQLiteDatabase 的有效非空实例。

    【讨论】:

      【解决方案3】:

      您可以使用递归 CTE 生成数字,然后插入 . . .但您需要更明确地说明要插入的值:

      with cte as (
            select 1 as n
            union all
            select n + 1
            from cte
            where n < 2550
           )
      insert into mytable (<something>)
          select <something>
          from cte;
      

      我认为您需要为 SQLite 中的至少一列指定值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-08
        • 2021-10-07
        • 2018-05-26
        相关资源
        最近更新 更多