如何在Perl连接SQL Server查询时同时返回列名与结果集
你可以通过DBI statement handle提供的{NAME}属性直接获取查询结果的列名,在遍历结果行前先打印列名即可实现需求,修改后的代码如下:
my $sql = "SELECT top (20) [code] AS Code ,Replace(Replace(Replace(Replace(Replace(Replace(Replace (Replace(Replace(Replace(Replace ([name],'“','"'),'”','"'),'<= ','≤'),'>=','≥'),'<','<'),'>','>'),CHAR(10),'<br>'),'\n',' '),CHAR(13),' '),'–','-'),'’',NCHAR(39)) AS ShortDesc ,Replace(Replace(Replace(Replace(Replace(Replace(Replace (Replace(Replace(Replace(Replace ([description],'“','"'),'”','"'),'<= ','≤'),'>=','≥'),'<','<'),'>','>'),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 ); # 执行查询 $sth->execute(); # 获取并打印列名 my @col_names = @{$sth->{NAME}}; print "@col_names\n"; # 如需列名和内容之间加分隔线,可取消注释下一行 # print "-" x length("@col_names") . "\n"; while ( my @row = $sth->fetchrow_array ) { print "@row\n"; } # 关闭连接 $sth->finish(); $dbh->disconnect();
$sth->{NAME}返回的列名顺序和你SELECT语句中声明的列顺序完全一致,且会自动获取你定义的AS别名,不需要额外调整即可匹配你声明的Code、ShortDesc等字段名。如果需要输出规整对齐的表格效果,可以提前统计所有行每列的最大字符宽度,按固定宽度格式化打印即可。
内容的提问来源于stack exchange,提问作者user15796482
相关产品推荐
相关产品推荐

