我有一个SQLite文件,我想添加2550 empty (NULL)行。
我可以用这段代码添加一个空行
INSERT INTO my_table DEFAULT VALUES
但我需要 2550 行。有什么捷径吗?我不想执行相同的代码 2550 次。
我有一个SQLite文件,我想添加2550 empty (NULL)行。
我可以用这段代码添加一个空行
INSERT INTO my_table DEFAULT VALUES
但我需要 2550 行。有什么捷径吗?我不想执行相同的代码 2550 次。
如果您的 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或为该列定义任何默认值。
如果您的表为空,则使用递归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语句中枚举表的所有列。
这些列将获得它们的默认值。
如果您的表不为空,您可以通过从表中的最大值开始整数rowid+1 以类似的方式执行此操作:
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
查看简化的演示(5 行)。
但是由于您还标记android-sqlite了您可以使用for循环:
for (int i = 1; i <= 2550; i++) {
db.execSQL("INSERT INTO my_table DEFAULT VALUES");
}
其中db是 的有效非空实例SQLiteDatabase。
您可以使用递归 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 中的至少一列指定值。