如何在一个语句中插入1000次?用SQLITE?

时间:2010-05-21 20:13:17

标签: sqlite

-edit-为了让它更清晰,我只是使用cmd线(在这种情况下实际上是ide)并且想用ram做快速测试并且不想做一个完全爆炸的prj快速一次性测试。 / p>

我想用10000000值填充此表,但首先我只想要1000。

我在sqlite数据库浏览器中尝试了这个但是没有插入3,除非我删除它之后的所有内容。但更重要的是,我不知道如何将num从1变为1000。

create table if not exists test1(id integer primary key, val integer);
insert into test1(val) select '3' as num where num between 1 and 1000

5 个答案:

答案 0 :(得分:10)

好的,这是一种在纯SQL中实现的方法......

create table if not exists test1(id integer primary key, val integer);

create trigger test1_ins_trigger after insert on test1
  when new.val < 1000 begin
    insert into test1(val) values(new.val + 1);
  end;

pragma recursive_triggers = 1;

insert into test1(val) values(1);

答案 1 :(得分:7)

CREATE TEMP TABLE Bits (Bit INTEGER PRIMARY KEY);
INSERT INTO Bits VALUES (0);
INSERT INTO Bits VALUES (1);

CREATE TEMP TABLE Nums AS SELECT
     b9.Bit * 512 + b8.Bit * 256 + b7.Bit * 128 + b6.Bit * 64 + b5.Bit * 32 +
     b4.Bit * 16 + b3.Bit * 8 + b2.Bit * 4 + b1.Bit * 2 + b0.Bit
     AS Num
FROM Bits b9, Bits b8, Bits b7, Bits b6, Bits b5,
     Bits b4, Bits b3, Bits b2, Bits b1, Bits b0;

CREATE TABLE Test1 (ID INTEGER PRIMARY KEY, Val INTEGER);
INSERT INTO Test1 SELECT Num, 3 FROM Nums WHERE Num BETWEEN 1 AND 1000;

答案 2 :(得分:0)

这是否要求纯SQLite?如果没有,只需循环一些编程语言(php / perl /挑选你的毒药)并在循环中创建INSERT语句。

对于唯一的SQLite特定解决方案,您可以使用virtual tables并创建一个模块来实现1..1000虚拟表。

答案 3 :(得分:0)

如果你可以使用Python:

import sqlite3
conn = sqlite3.connect(":memory:")
c = conn.cursor()
c.execute("create table test1 (id integer primary key, val integer);")
L = zip(range(1,1001))
c.executemany("insert into test1 (val) values (?);", L)
c.execute("select min(val), max(val) from test1;").fetchone()
#(1, 1000)

答案 4 :(得分:0)

DROP TABLE IF EXISTS test1;
CREATE TABLE IF NOT EXISTS test1(id INTEGER PRIMARY key, val INTEGER);
WITH RECURSIVE cnt(x) AS 
(
   SELECT
      1 
   UNION ALL
   SELECT
      x + 1 
   FROM
      cnt LIMIT 1000000 
)
INSERT INTO
   test1(val) 
   SELECT
      x AS outased 
   FROM
      cnt;