您最喜欢的调试MS SQL存储过程的方法是什么?

时间:2009-03-05 17:25:39

标签: sql sql-server debugging stored-procedures

我的大多数SP都可以通过手动输入数据来执行(和测试)。这很好用,使用简单的PRINT语句可以让我“调试”。

然而,有些情况下涉及多个存储过程并且找到有效的数据来输入是繁琐的。从我的网络应用程序中触发事物更容易。

我对分析器有一点经验,但我没有找到一种方法来探索我的存储过程中逐行进行的操作。

你的方法是什么?

一如既往地谢谢你。

注意:我假设使用SQL Server 2005 +

8 个答案:

答案 0 :(得分:8)

Profiler非常方便,只需添加SP:StmtStarting事件,并通过设置SPID = xxx将活动过滤到您的过程。一旦你完成了设置,就可以轻而易举地看到发生了什么。

答案 1 :(得分:4)

你实际上可以将一个调试器附加到你的sql server :) - 来自vs,假设你在sql server上配置了它。

点击此链接了解更多信息,请注意您可以设置断点:) https://web.archive.org/web/20090303135325/http://dbazine.com/sql/sql-articles/cook1

点击此链接可获取更为一般的信息:http://msdn.microsoft.com/en-us/library/zefbf0t6.aspx

更新:关于“但是有些情况下涉及多个存储过程并且找到有效的数据来输入是繁琐的。从我的网络应用程序中触发事物更容易。 “

我建议您设置集成测试,重点关注与这些过程交互的特定方法。如果这些程序是由Web应用程序驱动的,那么它是一个很好的地方,可以随时运行有效的测试+输入。如果有多个应用程序与程序交互,我会考虑单元测试程序。

答案 2 :(得分:1)

我更喜欢使用存储过程进行数据集检索,并在应用程序端执行任何复杂的“工作”。因为你是正确的,试图“调试”使用嵌套存储过程的许多分层,游标循环,临时表的内部发生的事情非常困难。

那就是说,MS KB 316549描述了如何使用visual studio来调试存储过程。

根据这篇文章,以这种方式调试存在许多限制:

  • 你不能“打破”执行。
  • 您无法“编辑并继续。”
  • 您无法更改语句执行的顺序。
  • 虽然您可以更改变量的值,但您的更改可能不会生效,因为变量值已缓存。
  • 不显示SQL PRINT语句的输出。

编辑:显然,如果是制作此存储过程的人,那么不要让它“多层次,游标循环,临时表使用,并嵌套“。不过,在我担任DBA的过程中,这几乎是我每天从应用程序开发人员那里遇到的。

答案 3 :(得分:1)

我不想调试,而是测试驱动开发,这几乎消除了调试的需要。

答案 4 :(得分:0)

如果不知道有效输入是什么,则需要测试各种输入,包括特别是无效输入。您应该在编写过程之前定义测试用例。然后,每当有人更改复杂过程时,您都会运行一组可重现的测试。

答案 5 :(得分:0)

我的团队按规则使用SP作为数据库的接口;我们这样做的方式是应用程序用户只能执行SP(使用我们的命名约定)。

我们使用的一个最佳实践是,某些测试脚本包含在SP注释中,并且必须在SP的每次转换或新SP的开发中执行。

您应始终在不涉及任何应用层的情况下,尽可能彻底地测试SP(例如,通过Management Studio)。

答案 6 :(得分:0)

这个技巧非常方便:

Custom user configurable Profiler Events

答案 7 :(得分:0)

确保你进入VS2005 / 2008中的主存储过程,当它遇到嵌套函数时,点击F11(步入)进入...继续调试......从调试菜单中不是很明显。