2013-04-13 19 views
12

csvファイルからデータを取り込み、最初の列にオートインクリメントのプライマリキーを追加するsqliteでテーブルを作成しようとしています。 は、ここで私はにデータを挿入しようとしているテーブルです:プライマリキーを自動インクリメントしてssiteにcsvをインポート

DROP TABLE IF EXISTS Allegiance; 
CREATE TABLE Allegiance (
    AllegianceID INTEGER PRIMARY KEY AUTOINCREMENT, 
    CharacterID INTEGER, 
    Title TEXT, 
    FOREIGN KEY (CharacterID) REFERENCES Characters(CharacterID)); 

はここで.csvファイル内のデータ

, 3, King of the North 
, 14, King of the Andals and the First Men 
, 15, Lord of Dragonstone 
, 26, Khaleesi 
, 35, Lord Reaper of Pyke 

は、これは私が受け取るエラーです:

sqlite> .mode csv 
sqlite> import allegiances.csv Allegiance; 
Error: datatype mismatch 

各行の最初のコンマの前に "null"がある場合、同じエラーが表示されます。 各行の最初のコンマの前に乱数を追加すると、エラーは発生しません。しかし、私が扱う必要のある実際のデータセットはもっと大きくなる可能性があります。したがって、各エントリに一意のプライマリキーを手動で追加することはできません。

+1

CSVファイル。 SQLiteStudioは、これらのプログラムの1つです。 – Vassilis

+0

@ VassilisGr NULL値を表すテキストはどういう意味ですか? – pouya

+0

@pouya、行が 'pouya、26、NULL'のようなcsvファイルを持っていれば、csvファイルのNULL値が" NULL "文字列で表されるように設定することができます。 'pouya、26、、'の場合、NULLを ""(空文字列)に設定します。あるいは 'pouya、26、0'はNULLで、csvファイルでは" 0 "です! – Vassilis

答えて

16

CSVファイルの空のフィールドは空の文字列で、INTEGER PRIMARY KEYの列には無効です。その列のない一時的なテーブルに

のインポートとデータをコピー:あなたは、サードパーティのプログラムを使用している場合、あなたはあなたの中にNULL値を表すテキストを設定するオプションを有していてもよく

INSERT INTO Allegiance(CharacterID, Title) SELECT * FROM TempTable; 
+0

このソリューションでエラーが発生しました。SELECTリストにnullフィールドを追加する必要がありました。INSERT INTO Allegiance(CharacterID、Title)SELECT NULL、Title FROM TempTable; –

関連する問題