2009-11-26 46 views
0

我可以很好地查询SQL服务器数据库。当我尝试查询视图时,问题就会发生。如何使用Perl和DBD :: ODBC从SQL Server查询视图?

我不想做任何疯狂:

$sql = 'select * from location_v'; 
$stj = $db_destination->prepare($sql); 

它让死在准备行。这是我回来的东西(这不是全部有用):

DBD::ODBC::db prepare failed: (DBD: st_prepare/SQLPrepare err=-1) 

不应该处理视图完全一样的表吗?提前致谢。

回答

3

您是否尝试过使用dbo。视图名称上的前缀(SELECT * FROM dbo.location_v)?你有没有检查视图实际上是在dbo中。架构?您是否检查视图和/或视图从中选择的基表的权限?可悲的是,ODBC并没有给出一个非常有意义的错误信息,所以它可以是任何数量的东西,但它最有可能是找不到对象(由于前缀,或者你在错误的数据库中)或权限。

1

是的,视图应该与该查询的表格无法区分。

你真的可以查询视图(而不仅仅是一般的数据库)吗?

-1的错误代码并不强烈地表示任何具体的问题。它有时可能是'没有许可',但它可能几乎是任何东西。

我建议通过在环境中设置DBI_TRACE = 9(或使用更小的数字)来查看问题出在哪里(或使用$dbh->trace(9))。这应该给你很多关于正在发生的事情的信息(并非全部都能理解);它可能会告诉你实际存在的问题。

0

Arg。我发现了这个问题。在查询视图之前,我有几个查询,并且在打开新视图之前我没有关闭手柄。我所需要做的是在我运行查询之前做的是:

undef $stj; 

希望这可以帮助别人。