Ich habe eine Tabelle in einer SQLite-Datenbank, die leer ist und die erste Spalte der Tabelle ist Autoincrement Primärschlüssel. Ich würde gerne eine CSV-Datei importieren, die keine ID hat: Es hat so viele Spalten wie die Tabelle, aber eine (ID). Wie kann ich die Werte in der CSV-Datei in die entsprechenden Spalten der Tabelle importieren?sqlite: Wie importiert man eine CSV-Datei in eine Tabelle, wenn die Anzahl der Spalten nicht gleich ist?
Hier ist ein Beispiel mimimal (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
Jede Hilfe sehr geschätzt.
Update: Gibt es eine Möglichkeit, eine temporäre Tabelle zu vermeiden?
Danke. Derzeit verwende ich diese Problemumgehung. Ich bin gespannt, ob es möglich ist, diese temporäre Tabelle zu vermeiden. – giordano