我有 2 台服务器:dbh1 和 dbh2,我在其中查询 dbh1 并通过 fetchall_arrayref 方法提取数据。执行查询后,我想将 dbh1 的输出插入到服务器 dbh2 上的临时表中。
我能够同时建立对两台服务器的访问权限,并且能够从两者中提取数据。1.我从dbh1拉数据:
while($row = shift(@$rowcache) || shift(@{$rowcache=$sth1->fetchall_arrayref(undef, $max_rows)})) {
#call to sub insert2tempData
&insert2tempData(values @{$row});
}
2. 然后在 dbh2 上我有一个插入查询:
INSERT INTO ##population (someid, Type, anotherid)
VALUES ('123123', 'blah', '634234');
问题:如何将 dbh1 中的 fetchall_arrayref 的批量结果插入到服务器 dbh2 上的临时表中(不循环单个记录)?
好的 - 所以我能够解决这个问题并能够实现以下代码:
my $max_rows = 38;
my $rowcache = [];
my $sum = 0;
if($fldnames eq "ALL"){ $fldnames = join(',', @{ $sth1->{NAME} });}
my $ins = $dbh2->prepare("insert into $database2.dbo.$tblname2 ($fldnames) values $fldvalues");
my $fetch_tuple_sub = sub { shift(@$rowcache) || shift(@{$rowcache=$sth1->fetchall_arrayref(undef, $max_rows)}) };
my @tuple_status;
my $rc;
$rc = $ins->execute_for_fetch($fetch_tuple_sub, \@tuple_status);
my @errors = grep { ref $_ } @tuple_status;
传输工作,但它仍然比我通过 SQL Server 导出/导入向导手动传输数据要慢。我注意到的问题是数据逐行流入目的地,我想知道是否可以增加批量传输大小。它下载数据的速度非常快,但是当我结合下载和上传时,速度会急剧下降,在服务器之间传输 5000 行表需要长达 10 分钟。