如何在sqlite中添加特定数量的空行?
How to add specific number of empty rows in sqlite?
我有一个 SQLite
文件,我想添加 2550 empty (NULL)
行。
我可以用这段代码添加一个空行
INSERT INTO my_table DEFAULT VALUES
但我需要 2550 行。有什么捷径吗?我不想执行相同的代码 2550 次。
您可以使用递归 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 中的至少一列指定值。
如果您的 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
或为该列定义的任何默认值。
如果你的 table 为空,则使用递归 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
的整数值,并且无需枚举 table 中的所有列INSERT
语句。
这些列将获得它们的默认值。
如果您的 table 不为空,您可以通过从 table +1:[=24 中的最大 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");
}
其中 db
是 SQLiteDatabase
的有效非空实例。
我有一个 SQLite
文件,我想添加 2550 empty (NULL)
行。
我可以用这段代码添加一个空行
INSERT INTO my_table DEFAULT VALUES
但我需要 2550 行。有什么捷径吗?我不想执行相同的代码 2550 次。
您可以使用递归 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 中的至少一列指定值。
如果您的 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
或为该列定义的任何默认值。
如果你的 table 为空,则使用递归 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
的整数值,并且无需枚举 table 中的所有列INSERT
语句。
这些列将获得它们的默认值。
如果您的 table 不为空,您可以通过从 table +1:[=24 中的最大 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");
}
其中 db
是 SQLiteDatabase
的有效非空实例。