调试存储过程(以及编写易于调试的sprocs)的最佳方法是什么?

MrB*_*les 21 .net sql stored-procedures

什么是创建sprocs以减少调试痛苦的好方法?还有哪些工具可用于调试存储过程?

也许最重要的是,有哪些迹象可以指出错误发生在sproc而不是代码中?我希望我在这里不是太糟糕了.投票回答上述任何一个问题.谢谢.

对于它的价值,我在.NET环境中工作,SQL服务器.

Ron*_*age 9

我在存储过程中使用的一种技术,使SQL Server 2005过程更容易调试(无需IDE或调试器):

我添加名为@Debug = 0的输入参数在此过程的参数列表的末尾(默认为0 =关).

然后我添加if(@Debug = 1)print'...';

关键接口的代码中的语句,以显示任何有用的内部值等.

是的,这是"老派",而让你"行走的代码"调试器是伟大的 - 但这个工程从任何SQL工具,任何人(包括任何调试没有你的同一个IDE).

罗恩


Ron*_*age 8

我用于简单日志输出和调试的另一种技术是在过程的顶部创建一个表变量:

   --**************************************************************************
   -- Create a log table variable to store messages to be returned to the
   -- calling application.
   --**************************************************************************
   declare @log             as table ( msg  varchar(MAX) );

then

     insert into @log values ('Inserted a new DVO Order into IRMA, order id: [' + convert(varchar(10), @@IDENTITY ) + ']');
etc.

then ...

   select msg from @log;
end
Run Code Online (Sandbox Code Playgroud)

在程序结束时 - 这取决于调用应用程序从过程调用中记录输出的程度,但我写的应用程序记录了所有内容.:-)


Dou*_*oug 6

我强烈建议您查看SQL管理工作室中的内置工具.

我在这里写了一篇非常详细的博客文章:

http://www.diaryofaninja.com/blog/2010/11/23/debugging-sql-queries-function-amp-stored-procedures-with-sql-management-studio

基本上它的要点是你输入sql查询来执行你的存储过程,而不是按F5或按下感叹号,你点击播放按钮并使用F10和F11逐步进入你的存储过程.

非常方便 - 似乎没有人使用它.


cra*_*igb 1

我见过的一些成功使用的模式是“诊断”或“测试”模式和日志记录。

当您执行动态 SQL 时,测试或诊断模式非常有用。确保您可以看到要执行的内容。如果您有需要(或应该)检查错误的区域,请考虑记录到包含足够详细信息的表中,以便您可以诊断正在发生的情况。