使用perl脚本将不完整的数据上载到SQL server

使用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

我有一个脚本,它读取我根据当前访问的文件库生成的两列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 $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)
,查看错误日志可能会有所帮助。