前两天为用友二次开发的一个项目查询数据报错,这个查询是通过一个主存储过程调用三个自定义函数,TSQL代码很多,而且用到很多循环递归,查询分析器报的错误地址在一个递归的入口,设断点跟踪了几次,因为太长了,未果。今天看了鞠强的SQL Server性能调优入门(图文版) ,有些心得,利用SQLServer的事件探查器终于找到错误位置。
首先通过事件探查器建立一个跟踪,跟踪属性中常规选项卡采用默认设置,事件选项卡只保留存储过程并加入SP:stmtCompleted和SP:stmtStarting,结果如下图:
在筛选选项卡中设定好SPID,点击运行。
然后在查询分析器中执行出错的存储过程,报错结束后由最后开始找到只有Starting而没有Completed的语句就是我们要找的。
剩余的事情就简单了,在出错位置设好断点,获取出错时变量的值,就可以找到错误的原因了。
首先通过事件探查器建立一个跟踪,跟踪属性中常规选项卡采用默认设置,事件选项卡只保留存储过程并加入SP:stmtCompleted和SP:stmtStarting,结果如下图:
在筛选选项卡中设定好SPID,点击运行。
然后在查询分析器中执行出错的存储过程,报错结束后由最后开始找到只有Starting而没有Completed的语句就是我们要找的。
剩余的事情就简单了,在出错位置设好断点,获取出错时变量的值,就可以找到错误的原因了。