【发布时间】:2011-06-13 11:07:56
【问题描述】:
在 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'.
请帮忙?谢谢!
【问题讨论】:
-
如果您在 INFORMATION_SCHEMA.COLUMNS 上获得无效的对象名称,则可能是您没有权限。如果您的排序规则区分大小写,您还需要使用全部大写。但它肯定存在于 SQL Server 中。
-
废话。 information_schema 在包括 MS SQL Server 在内的许多数据库中都可用。
-
INFORMATION_SCHEMA.COLUMNS 是 mysql5 的东西。它在 mysql 4.1 中不可用
-
显然@Emtucifor 是正确的,排序规则在我的服务器上区分大小写,因此在将所有内容更改为大写后,我得到了查询工作,并且我能够以这种方式提取列名。谢谢大家。
-
正在将我的评论转换为答案...
标签: sql-server perl dbi