如何调试sql存储过程?

时间:2011-09-30 12:15:50

标签: visual-studio-2010 tsql debugging ssms

如何调试tsql存储过程。我尝试过以下链接。

http://msdn.microsoft.com/en-us/library/ms241871(v=vs.80).aspx

但我无法达到突破点。有没有更好的调试方法。我的环境是

Sql Express 2008,Visual Studio 2010

3 个答案:

答案 0 :(得分:2)

我发现SQL Managment studio中的调试器不可靠,因为它依赖于在数据库服务器上拥有并非总是可用的正确权限。

我使用的另一种方法是将存储的proc转换为长查询。我首先将任何参数传递给变量声明并设置它们的值。例如以下

    ALTER PROCEDURE [dbo].[USP_ConvertFinancials] (@EffectiveDate datetime, @UpdatedBy nvarchar(100)) 
AS
BEGIN

    DECLARE @PreviousBusinessDay datetime

会变成

DECLARE @Value int, 
        , @EffectiveDate datetime = '01-Jan-2011
        , @UpdatedBy nvarchar(100) = 'System'

这允许我从顶部开始在存储过程中运行查询。当我向下浏览查询时,我可以通过简单地选择它们并从顶部重新运行查询来检查变量的值:

SELECT @Value 

我还可以注释掉INSERT-SELECT语句的INSERT部分,以查看插入表和表变量的内容。

使用此方法,存储过程中的错误通常变得非常明显。一旦我正确运行查询,我可以简单地将代码复制到我的proc并重新编译。

祝你好运!

答案 1 :(得分:0)

你可以尝试Sql Profiler,它不允许像“在这一点上突破”这样的经典调试,但是会为你提供有关查询/ SP执行的每一步发生的事情的非常详细的信息。

不幸的是,Microsoft没有为它提供Express Edition版本的Sql Server。 但是:)有一个好的(相对因为它没有提供微软的许多过滤标准)和免费替代 - SQL Server 2005/2008 Express Profiler

答案 2 :(得分:0)

调试存储过程。

  1. 检查逻辑是否有意义。
  2. 使用断点帮助查找问题。
  3. 尝试按照复杂的过程进行模块化设计。
  4. 将任务划分为多个简单的任务。
  5. 使用主存储过程在顶部进行控制,并使用多个子存储过程逐步完成工作。

  6. 根据优化,使用执行计划,SS Profiler和DTA工具。