通过 Perl DBI 从 SQL Server 获取列名

问题描述 投票:0回答:3

在 SQL Server Management Studio 2008 中,我可以运行

sp_columns MY_TABLE

获取所有列名称(在

COLUMN_NAME
下)。但是,如何使用 Perl DBI 获得相同的信息?

我特别尝试过

my $result = $dbh->selectall_hashref("sp_columns MY_TABLE", 'COLUMN_NAME');

希望列名是返回的哈希的键。

事实上,即使成功,这也不是我想要的,因为我需要保留该表中列的顺序。所以我尝试了

my $sth = $dbh->prepare("sp_columns $table");
$sth->execute();
while (my @row = $sth->fetchrow_array) {
    # process @row;
}

但这两种方法都不起作用。我收到错误消息

DBD::Sybase::db selectall_hashref failed: Server message number=102 severity=15 state=1 line=1 server=XXXX text=Incorrect syntax near '.'

我还参考了这篇文章。显然,以下查询在我的 Management Studio 中NOT不起作用:

select * from information_schema.columns where table_name = MY_TABLE

错误消息为

Msg 208, Level 16, State 1, Line 2
Invalid object name 'information_schema.columns'.

请帮忙?谢谢!

sql-server perl dbi
3个回答
5
投票

返回的列名是准备好的语句的属性,因此您可以使用:

my $dbh = DBI->connect('dbi:DBMS:...','','');
my $sth = $dbh->prepare("SELECT * FROM SomeTable");

现在

$sth->{NAME}
(数组引用)包含列的名称(如别名等)。


3
投票

请参阅 DBI 支持的目录方法。特别是,我希望您想要 table_info。


0
投票

如果您在 INFORMATION_SCHEMA.COLUMNS 上获得无效的对象名称,则可能是您没有权限。如果您的排序规则区分大小写,则还需要全部大写。但它确实存在于 SQL Server 中。

© www.soinside.com 2019 - 2024. All rights reserved.