通过Perl DBI获取列名

时间:2011-01-21 22:27:39

标签: sql-server perl dbi

在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 '.'

我还引用了this post。显然,以下查询在我的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'.

请帮帮忙? THX!

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

请参阅DBI支持的catalogue methods。特别是,我希望你想要table_info。

答案 2 :(得分:0)

如果您在INFORMATION_SCHEMA.COLUMNS上获得了无效的对象名称,则可能是您没有获得许可。如果您的排序规则区分大小写,则还需要使用全部大写字母。但它肯定存在于SQL Server中。