1

我想要一个简单的 perl 脚本/子程序来将 sql server 表读入哈希,有没有人有一个好的脚本或片段(带有'use's)可以在给定连接字符串和表名的情况下做到这一点?

这是一个模板:

sub sqltable {    
    my ($connStr,$table) = @_;    
    my ($user, $password, $host) = ($connectstr =~ m|^(.*)/(.*)@(.*)$|); # or whatever    
    my $dbh = DBI->connect("dbi:???:$host",$user,$password, { RaiseError => 1 }); # replace ??? with good SQL Server equivalent
    $dbh-> ???; # anything good for this part?  LongTruncOk?  LongReadLen?    
    return $dbh->selectall_arrayref("select * from $table");    
}
4

4 回答 4

9

请参阅Perl DBI 页面中的selectall_hashref

于 2009-12-14T21:53:45.323 回答
5

关于使用 Perl 连接到 SQL Server,

于 2009-12-14T23:32:53.913 回答
2

您正在准确描述Tie::DBI。Perl 中的tie工具允许本地数据结构(例如数组和散列)表示来自其他机制(例如数据库和文件)的数据。

也就是说,您可以阅读大量关于 Perl 中数据库访问和管理的一般主题的内容。有许多成熟的 ORM 可用,例如Rose::DB::Object,以及用于连接数据库的更简单的库(例如DBI )。

于 2009-12-14T23:55:19.597 回答
1

我认为这是您正在寻找的解决方案。

sub get_db {
  my ($server,$database,$tbl,$username,$password) = @_;
  my $dbh = DBI->connect("dbi:ODBC:DRIVER={SQL Server};SERVER=$server;DATABASE=$database",$username,$password); 
  die "Error connecting to database: Error $DBI::err - $DBI::errstr\n" unless defined($dbh);
  my $rows = $dbh->selectall_arrayref("select * from $tbl");
  $dbh->disconnect;
  return $rows;
}
于 2009-12-16T20:02:49.560 回答