use strict; use warnings; use Text::CSV; use DBI; my $dbName = "YourDBname.sqlite"; my %attr = ( RaiseError => 1); # auto die with error printout my $dbh = DBI->connect("dbi:SQLite:dbname=$dbName","","",\%attr) or die "Couldn't connect to database $dbName: " . DBI->errstr; my $csv = Text::CSV->new ({ binary => 1 }); my $columnHeaders = ; chomp $columnHeaders; my @colNames = split ",",$columnHeaders; $dbh->do("DROP TABLE IF EXISTS Irs"); my $createStatement = "CREATE TABLE Irs (".join (" TEXT,",@colNames)." TEXT)"; print "Create SQL Stmt=>$createStatement\n"; $dbh->do("$createStatement"); my $qMarks = ("?," x @colNames); # placeholders for each column's data $qMarks =~ s/,$//; # no comma after the last one my $insertSQL = "INSERT INTO Irs (".join(",",@colNames).") VALUES ($qMarks)"; print "insertSQL STMT=>$insertSQL\n"; my $insert_row = $dbh->prepare("$insertSQL"); $dbh->begin_work; # Single Transaction for all of the Table's data # million rows is just fine while (my $row_ref = $csv->getline (*DATA)) { $insert_row->execute(@$row_ref); } $dbh->commit; =Prints: Shows the CREATE TABLE and INSERT SQL statements that were generated Create SQL Stmt=>CREATE TABLE Irs (GIIN TEXT,FINm TEXT,CountryNm TEXT) insertSQL STMT=>INSERT INTO Irs (GIIN,FINm,CountryNm) VALUES (?,?,?) =cut __DATA__ GIIN,FINm,CountryNm "98Q96B.00000.LE.250","Test Bank One, LLP","France" "98Q96B.00000.BR.826","Branch","United Kingdom" "98Q96B.00000.BR.036","Branch","Australia" "98Q96B.00000.BR.076","Branch","Brazil" "98Q96B.00000.BR.818","Branch","Egypt" "98Q96B.00001.ME.276","Test Bank Two","Germany" "98Q96B.00001.BR.826","Branch","United Kingdom" "8124H8.00000.SP.208","Test Bank Three","Denmark" "C54S47.99999.SL.276","Test Bank Four","Germany" "C54S47.99999.BR.208","Branch","Denmark" "126BM7.00000.LE.826","Test Bank Five","United Kingdom" "126BM7.00000.BR.250","Branch","France" "126BM7.00001.ME.208","Test Bank Nine","Denmark" "126BM7.00002.ME.276","Test Bank Ten, LLP","Germany" "126BM7.00002.BR.344","Branch","Hong Kong" "SE19K4.99999.SL.250","Test Bank Eleven","France" "76GHU9.00000.BR.036","Branch","Australia" "AAAAAA.00000.SP.001","Test Bank, 150-character name1 23456-40 123456-50x123456-60x123456-70x123456-80x123456-90x12345-100 12345-110 12345-120 12345-130 12345-140 123456-150","Afghanistan" "AAAAAA.00000.SP.002","Test Bank, 150-character name2 (parenthesis) [square brackets] {curly brackets}-60x123456-70x123456-80x123456-90x12345-100 12-130 12345-140 123456-150","France" "AAAAAA.00000.SP.003","Test Bank, 150-character name3 (3456-4) [23456-50x123456-60x123456-70x123456-80x123456-90x12345-10] {2345-11} 12345-120 12345-130 12345-140 123456-150","Egypt"