为什么我通过ODBC调用的存储过程在同一位置失败?

时间:2008-10-15 20:18:43

标签: sql sql-server sql-server-2000 odbc

我正在使用freeodbc++库访问MS SQL Server 2000数据库(SP3?SP4?)上的数据。特别是,我正在运行一个特别冗长而讨厌的存储过程。我可以在SQL事件探查器中看到程序执行,但是,它往往会在某个时刻停止处理。没有抛出错误代码或异常。如果我注释掉始终是最后一个语句的嵌套语句,它只会在注释之前稍微结束。我没有尝试从根本上评论出整个事情......我将查询超时设置为300秒。可调用语句通常在1秒内返回,而不实际完成SP。

有什么想法吗?

UPDATE0:如果我通过查询分析器或其他工具运行SP ......它可以运行。它只是通过我的ODBC连接失败了。

UPDATE1:当我注释掉代码时,执行会进一步进入SP。让我觉得我遇到了超时或缓冲限制。

4 个答案:

答案 0 :(得分:0)

从查询分析器运行该过程,看看会发生什么。您可以在过程中使用RAISERROR()函数将跟踪信息提供回消息窗口,以帮助您进行调试。

答案 1 :(得分:0)

您是否尝试过使用TRY和CATCH?它可能会在您不会看到的存储过程中的函数调用上抛出错误。

BEGIN TRY
 <Your code>
END TRY
BEGIN CATCH
        DECLARE @ErrMsg nvarchar(max),
            @ErrSeverity int,
            @ErrState int
    SELECT  @ErrMsg = ERROR_MESSAGE(),
            @ErrSeverity = ERROR_SEVERITY(),
            @ErrState = ERROR_STATE()

    RAISERROR (@ErrMsg,@ErrSeverity,@ErrState);
END CATCH

答案 2 :(得分:0)

您是否尝试过在SQL Server端进行性能分析,看看您的SPID发生了什么?

另外,我没有使用过freeodbc ++,但也许在那里有一个它不喜欢的PRINT语句。您还可以设置NOCOUNT ON以禁止行计数消息。同样,这取决于freeodbc ++如何对这些“信息”消息做出反应。

这听起来像是freeodbc ++中的一个错误,基于你所描述的这种“冻结”的行为方式。首先检查SQL端的进程,看它是否真的挂起,或者你的库刚刚“死”了你。

答案 3 :(得分:0)

添加“:: Sleep(30000);”我在ODBC语句对象上调用execute之后(在语句关闭命令之前)立即使服务器进程过早退出。必须是freeodbc ++的错误或我的配置错误。

感谢您排除故障/调试提示。