Получить имена столбцов через Perl DBI - PullRequest
2 голосов
/ 22 января 2011

В 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:

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 ]

4 голосов
/ 22 января 2011

Возвращенные имена столбцов являются атрибутом подготовленного оператора, поэтому вы можете использовать:

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

и теперь $sth->{NAME} (ссылка на массив) содержит имена столбцов (как псевдонимы и т. Д.)).

3 голосов
/ 22 января 2011

См. методы каталога , которые поддерживает DBI. В частности, я ожидаю, что вы хотите table_info.

0 голосов
/ 25 января 2011

Если вы получаете недопустимое имя объекта в INFORMATION_SCHEMA.COLUMNS, возможно, у вас нет разрешения.Если ваша сортировка чувствительна к регистру, вам также нужно использовать все заглавные буквы.Но он определенно существует в SQL Server.

...