如何使用Perl和DBD :: ODBC从SQL服务器查询视图?

时间:2009-11-26 20:19:32

标签: sql-server perl dbi

我可以查询SQL Server DB。当我尝试查询视图时会发生问题。

我不想做任何疯狂的事情:

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

它一直在准备线上死亡。这是我要回来的(这不是那么有用):

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

不应该将视图处理与表完全相同吗?提前谢谢。

3 个答案:

答案 0 :(得分:3)

你尝试过使用dbo吗?视图名称上的前缀(SELECT * FROM dbo.location_v)?您是否检查过该视图实际上是在dbo中。架构?您是否检查了视图和/或视图正在选择的基表的权限?遗憾的是,ODBC在这里没有提供非常有意义的错误消息,所以它可以是任意数量的东西,但很可能是找不到对象(因为前缀,或者你在错误的数据库中)或权限。

答案 1 :(得分:1)

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

您是否可以实际查询视图(而不仅仅是数据库)?

错误代码-1并不强烈表示任何特定的问题。它有时可能是“没有许可”,但它几乎可以是任何东西。

我建议使用在环境中设置的DBI_TRACE = 9(或者更小的数字)(或使用$dbh->trace(9))来查看问题所在。这应该会给你很多关于正在发生的事情的信息(不是所有可以理解的);它可能会告诉你实际上的麻烦。

答案 2 :(得分:0)

精氨酸。我发现了这个问题。我在查询视图之前遇到了一些问题,在打开新视图之前我没有关闭我的句柄。在我运行查询之前,我需要做的就是:

undef $stj;

希望这有助于其他人。