【问题标题】:Perl: how to export data from SQL Server into tab delimited txt file using perlPerl:如何使用 perl 将数据从 SQL Server 导出到制表符分隔的 txt 文件中
【发布时间】:2021-08-02 20:53:58
【问题描述】:

我正在编写一个连接到 SQL 服务器的 perl 脚本。我编写了一个查询来获取我需要的数据。但是在 perl 中,如何使用 perl 将数据从 SQL 导出到制表符分隔的 txt 文件中?

这是我的示例脚本:

my $sql = "SELECT top (20) [code] AS Code
      ,Replace(Replace(Replace(Replace(Replace(Replace(Replace
      (Replace(Replace(Replace(Replace
      ([name],'\“','\"'),'\”','\"'),'<= ','&le;'),'>=','&ge;'),'<','&lt;'),'>','&gt;'),CHAR(10),'<br>'),'\n',' '),CHAR(13),' '),'–','-'),'’',''+NCHAR(39)+'') AS ShortDesc
      ,Replace(Replace(Replace(Replace(Replace(Replace(Replace
      (Replace(Replace(Replace(Replace
      ([description],'\“','\"'),'\”','\"'),'<= ','&le;'),'>=','&ge;'),'<','&lt;'),'>','&gt;'),CHAR(10),'<br>'),'\n',' '),CHAR(13),' '),'–','-'),'’',''+NCHAR(39)+'') AS LongDesc
      ,CASE WHEN isobsolete = 0 THEN 'NULL' ELSE 'Y' END AS Obsolete
      
FROM (
     SELECT ROW_NUMBER() OVER(PARTITION BY code ORDER BY effectivefromdate DESC) rn, * 
     FROM [CodingSuite_STG].[Codes].[Hcpcs] ) cs
     WHERE  rn=1 
     order by code asc";
     
my $sth = $dbh->prepare( $sql );

 
#Execute the statement
$sth->execute();


while ( my @row = $sth->fetchrow_array ) {
     print "@row\n";
}

#Close the connection
$sth->finish();
$dbh->disconnect();

【问题讨论】:

  • 可能最简单的方法就是使用bcp,将数据导出到文件是它最擅长的。
  • 您好,请详细说明您的答案
  • 您的问题不完整。一些数据库允许将信息提取到外部文件中并指定分隔符。请查看SELECT ... INTO Statement。你很有可能没有发明 DB 提供的东西。
  • 跳过 Perl 部分,让数据库为您处理所有奇怪的情况:stackoverflow.com/questions/425379/…

标签: sql-server perl dbi


【解决方案1】:

您可以尝试使用join()。大致如下:

...

my $fh;

if (!open($fh, '>', "/path/to/file")) {
  die($!);
}

while (my @row = $sth->fetchrow_array) {
  print($fh, join("\t", @row) . "\n");
}

close($fh);

...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-28
    • 2011-09-26
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多