繁体   English   中英

如何使用DBI自动化要从Perl导入SQL Server的大量txt文件?

[英]How to automate a large number of txt files to be imported from Perl to a SQL Server using DBI?

我试图将一个txt文件从Perl转移到SQL Server中,但是现在我需要在SQL中创建一个包含数百个txt文件的数据库。 有没有一种自动的方式来保存手动传输所有txt文件的方式? 我将插入对一个txt文件进行编码的尝试。 我相信我需要使用批量插入来实现此目的,但是我不确定要使用什么代码。 对此问题的任何建议将不胜感激,如果还有其他您希望看到的代码或我忘了提及的特定内容,请发表评论,我将进行编辑。 谢谢。

#!/usr/bin/perl -w
use strict;
use DBI;
use Carp;

    # Connect to the data source and get a handle for that connection.
my $dbh = DBI->connect('dbi:ODBC:RegressionDBS') ||
    confess "Connection Failed: $DBI::errstr";

    # This query generates a result set with one record in it.
my $sql = "SELECT 1 AS test_col";
my $tablename = "RegressionTable";

open(FH, "newregression.txt") || die "cant open file";
my $Sqlh = $dbh->prepare("INSERT INTO RegressionTable (Ticker, TradeDate, HighPrice, LowPrice, TradePrice, TotalVolume, TotalValue) VALUES (?,?,?,?,?,?,?);") || confess $DBI::errstr;
while (my $line = <FH> )
{
$line =~/^(.*)(..)(..)$/;
my ($curTicker, $wTradeDate, $wHighPrice, $wLowPrice, $wTradePrice, $wTotalVolume, $wTotalValue);
    $curTicker=$1
    #$wTradeDate=
    $wHighPrice=$2;
    $wLowPrice=$1;
    #$wTradePrice=$1;
    #$wTotalVolume=$1;
    #$wTotalValue=$4;

$Sqlh->execute($curTicker, $wTradeDate, $wHighPrice, $wLowPrice, $wTradePrice, $wTotalVolume, $wTotalValue) || confess $DBI::errstr; 
}

$Sqlh->finish();
$dbh->disconnect();

好了,你跑

INSERT INTO RegressionTable (
  Ticker, TradeDate, HighPrice, LowPrice, TradePrice, TotalVolume, TotalValue
) 
VALUES (?, ?, ?, ?, ?, ?, ?)

对于newregression.txt每一行,现在您要对多个文件执行此操作。 为什么不在上面的代码中将代码包装在一个子例程中,例如insert_file() ,然后在循环中每个文件调用它...

my @files = qw(red.txt green.txt blue.txt);
for my $file (@files) {
  insert_file($file);
}

或者,如果目标表因文件而异,则定义哈希:

my %files = (
  'red.txt'  => 'RedTable', 
  'blue.txt' => 'BlueTable'
);
while ( my ($file, $table) = each %files ) {
  insert_file($file, $table);
};

如果数据文件中的字段分隔符似乎不确定,则不确定如何使用批量插入 (即,正则表达式/(.*)(..)(..)/定义字段边界)。 您可能需要使用FORMATFILE选项。 另外,如果您使用DBI生成BULK INSERT语句,请注意,您的SQL Server运行用户必须能够通过文件系统(网络,本地或其他)读取数据文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM