【问题标题】:how to debug tsql stored procedure?如何调试sql存储过程?
【发布时间】:2011-11-28 10:34:24
【问题描述】:

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

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

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

Sql Express 2008、Visual Studio 2010

【问题讨论】:

  • 你用的是什么版本的VS?如果 Express it is not supported 但无论如何看起来更相关(最新)的链接。

标签: visual-studio-2010 tsql debugging ssms


【解决方案1】:

我发现 SQL 管理工作室中的调试器不可靠,因为它非常依赖于数据库服务器上的正确权限,而这些权限并不总是可用。

我使用的另一种方法是将存储的过程转换为长查询。我首先将任何参数移动到变量声明并设置它们的值。例如下面的

    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 并重新编译。

祝你好运!

【讨论】:

    【解决方案2】:

    您可以尝试Sql Profiler,它不允许像“此时中断”这样的经典调试,但会为您提供有关查询/SP 执行的每个步骤的详细信息。

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

    【讨论】:

    • 不是一回事。设置调试的重点是进入各个行并查看变量值等。我自己只使用PRINT 语句,但有可能让它工作。
    • @Martin Smith:你说得对,这是一个分析器,而不是一个经典的调试器,但它在开发和调试时也非常有用(即使是复杂的 Db 解决方案,我也从来没有使用过调试器,总是使用 Sql Profiler 就足够了(坦率地说是微软的一个))
    • 是的,我记得内置的调试器不值得打扰,IIRC 你不能做你在C# 中调试时可以做的事情——比如查看当前值表变量中的行数。
    【解决方案3】:

    调试存储过程。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 2015-11-20
      • 2019-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多