使用perl脚本将不完整的数据上载到SQL server
我有一个脚本,它读取我根据当前访问的文件库生成的两列CSV。我将文件压缩到一个数组中,然后使用以下代码逐元素将CSV上传到SQL表中:使用perl脚本将不完整的数据上载到SQL server,sql,sql-server,perl,Sql,Sql Server,Perl,我有一个脚本,它读取我根据当前访问的文件库生成的两列CSV。我将文件压缩到一个数组中,然后使用以下代码逐元素将CSV上传到SQL表中: my $e_sth = $trans->prepare("delete from $table where 1 = 1"); $e_sth->execute(); my $u_sql = qq{ insert into $table (KTM, SUBSITE) values
my $e_sth = $trans->prepare("delete from $table where 1 = 1");
$e_sth->execute();
my $u_sql = qq{
insert into $table (KTM, SUBSITE) values
(?, ?)
};
my $u_sth = $trans->prepare($u_sql);
foreach my $rec (@list) {
my ($klf, $subsite) = split(",", $rec);
# Upload
$u_sth->execute($klf, $subsite)
}
$trans->commit();
它总是文件的最后一行,所以我相信这会让你们中的一些人马上关注这个问题。但是我迷路了。我假设foreach
循环会阻止类似的事情发生。最后一行被截断的字符数也不同。这两列都设置为CHAR(100),其中KTM列是主键
任何帮助或指导都将不胜感激。谢谢
编辑:看起来我可能达到了表的某种数据限制。我将研究如何扩展表的分配大小。也许它不相关,但是不需要在那里使用
WHERE
子句(WHERE 1=1
),除非您删除了一些特定的行。您的DBI代码看起来正确,通过添加一些“日志记录”开始调试。例如,将$u\u sth->execute($klf,$subsite)
更改为警告“$klf->$subsite”;警告$u_sth->execute($klf,$subsite)
并查看错误日志可能会有所帮助。可能这并不相关,但不需要在那里使用WHERE
子句(WHERE 1=1
),除非您要删除某些特定行。您的DBI代码看起来正确,通过添加一些“日志记录”开始调试。例如,将$u\u sth->execute($klf,$subsite)
更改为警告“$klf->$subsite”;警告$u_sth->execute($klf,$subsite)
,查看错误日志可能会有所帮助。