理解存储过程的更好方法

时间:2009-05-08 13:11:43

标签: sql sql-server-2005 stored-procedures

我试图对存储过程的绝对怪异进行decypher并且我没有太多运气。是否有任何免费工具可以帮助查看查询,或者至少将语法格式化为更易读的格式?

也欢迎任何提示和提示。

我使用的数据库类型是MS sql server 2005

8 个答案:

答案 0 :(得分:5)

查找正在使用的所有表格并自己绘制ERD以便更好地理解。

答案 1 :(得分:2)

如果您使用的是SQL Server,则可以查看执行计划。

你也可以使用像SQLInform这样的工具重新格式化你的sproc,如果它的形状不好。

答案 2 :(得分:2)

你有一份方便的Visual Studio副本吗? Visual Studio突出显示有时可帮助隔离逻辑块的语句块。如果可以节省带宽,可以下载(免费)Express Editions

如果您想要更轻量级的产品,那么有很多产品列表here

对于存储的Proc调试技巧..我建议如下:

  1. 尝试并确定声明变量的使用 - 特别是如果它们在各种查询中被引用(随时添加注释,将帮助您将它们拼凑在一起)。
  2. 看看你是否可以复制sproc的各个部分,即将其分解成更容易调查的块
  3. 隔离任何依赖项(例如udfs)并确保您了解它们对proc的贡献 - 有时udf可能会为您提供一个您无法收集的洞察力

答案 3 :(得分:1)

我在前几天发现了一个在线SQL“美化”,以回应类似的查询,这可能对您有用:

Align microsoft access queries

答案 4 :(得分:0)

通常,它可以帮助手动运行存储过程的各个部分。这需要一些工作,但可能会有所帮助。

首先将存储过程转换为标准sql,方法是删除sproc声明并声明并初始化每个所需参数。

运行一个逐步增大的sproc部分,并检查结果以了解发生了什么。通过打印变量或临时表来执行此操作,或者仅通过将输出修改为屏幕而不是临时源来执行此操作。

确保你记录/分割/重写你最终找到的东西 - 你不希望其他人也必须这样做,对吗?

答案 5 :(得分:0)

什么是怪物?这是一个巨大的陈述,许多连续的陈述,还是许多有条件的陈述? 对于非常大的复杂语句,我认为它可以简化将子查询拉入CTE的可读性。 如果有很多语句或条件分支,那么将处理单元拉出到怪物sproc调用的其他sproc中会很有帮助。

答案 6 :(得分:0)

如果有很多循环和/或IF / ELSE,添加许多“PRINT'Loop / IF X.Y'”,其中X是您选择的唯一Loop / IF名称/编号,Y是唯一的位置那个Loop / IF。然后从管理工作室运行该过程。这将使您快速了解该过程的运行流程。

您可以扩展这个想法,并在过程中的不同位置输出局部变量及其值,行数等,以了解正在发生的事情。

如果您不确定如何手动运行它,因为您不知道要使用哪些参数,请捕获参数。在过程的第一行插入日志表:

INSERT INTO YourLogTable
    VALUES ('EXEC YourProcedureName @Param1='+COALESCE(''''+convert(varchar,@Param1)+'''','NULL')+', @Param2='+COALESCE(''''+convert(varchar,@Param2)+'''','NULL'))

然后,您可以运行您的应用程序来调用该过程,然后从日志中剪切/粘贴并手动运行该过程。

答案 7 :(得分:0)

我同意Eppz。 “滚动自己的”图表将帮助您更好地理解程序。我发现这个工具非常有用:http://www.aivosto.com/visustin.html