我在sqlite-database中有一个表为空,表的第一列是autoincrement主键。我想导入一个没有id的csv文件:它具有与表一样多的列但只有一个(id)。如何将csv文件中的值导入到表的相应列中?
这是一个极端的例子(Windows 7,DOS):
REM -- Create csv-file
type NUL > data.csv
echo 'a1','b1' >> data.csv
echo 'a2','b2' >> data.csv
type data.csv
'a1','b1'
'a2','b2'
REM -- create database and tables
sqlite3 test.db "SELECT 1;"
sqlite3 test.db "CREATE TABLE tab0 (va TEXT, vb TEXT);"
REM this table has 3 columns:
sqlite3 test.db "CREATE TABLE tab1 (id INTEGER NOT NULL PRIMARY KEY, va TEXT, vb TEXT);"
REM -- Import csv file where number of columns are equal
sqlite3 -separator "," test.db ".import 'data.csv' tab0"
sqlite3 test.db
sqlite> select * from tab0;
'a1'|'b1'
'a2'|'b2'
REM -- Import csv file where number of columns are NOT equal
sqlite3 -separator "," test.db ".import 'data.csv' tab1"
data.csv:1: expected 3 columns bit found - filling the rest with NULL
data.csv:1: INSERT failes: datatype mismatch
data.csv:2: expected 3 columns bit found - filling the rest with NULL
data.csv:2: INSERT failes: datatype mismatch
任何帮助表示感谢。
更新:有没有办法避免临时表?
答案 0 :(得分:1)
使用Tab0作为临时表,您应该从中插入tab1。
INSERT INTO tab1(va, vb) SELECT * FROM tab0;
答案 1 :(得分:1)
您可以使用tab0填充tab1。
类似
INSERT INTO tab1( va,vb )
SELECT va, vb
FROM tab0
应该有效。
答案 2 :(得分:1)
您可以将自动增量字段移动到表的末尾,其中缺失值将在导入时被null替换,因此被自动增量值替换(" NOT NULL"暗示,所以你不要&# 39; t需要它):
CREATE TABLE tab1 (va TEXT, vb TEXT, id INTEGER PRIMARY KEY)