【问题标题】:A better way to understand stored procedures更好地理解存储过程的方法
【发布时间】:2009-05-08 13:11:43
【问题描述】:

我试图破译存储过程的绝对怪物,但我运气不佳。是否有任何免费工具可以帮助将查询可视化或至少将语法格式化为更易读的格式?

也欢迎任何提示和技巧。

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

【问题讨论】:

  • 存储过程的语言因 DB 类型(Oracle、Sybase 等)而异。您可能希望将其包含在您的问题和标签列表中。
  • 我一直觉得最好自己重新格式化。除非您以您理解的方式格式化它,否则您不会完全理解发生了什么。
  • 在使用怪物 SQL 时,我做的第一件事就是将其重新格式化为可读格式。我最喜欢的工具是 SQLinForm (www.sqlinform.com)

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


【解决方案1】:

找到所有正在使用的表格,并为自己画一个 ERD 以便更好地理解。

【讨论】:

    【解决方案2】:

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

    如果您的存储程序状态不佳,您也可以使用SQLInform 之类的工具重新格式化它。

    【讨论】:

    • 虽然执行计划可能比过程本身更可怕。
    【解决方案3】:

    您手边有 Visual Studio 的副本吗? Visual Studio 突出显示有时有助于隔离逻辑块的语句块。如果您可以节省带宽,可以下载(免费)Express Editions

    如果您想要更轻量级的产品,here 有一长串产品。

    对于存储过程调试技巧.. 我建议如下:

    1. 尝试确定已声明变量的用途 - 特别是在各种查询中引用它们时(随时添加 cmets,将帮助您拼凑起来)
    2. 看看您是否可以复制存储过程的各个部分,即将其分解成更易于调查的块
    3. 隔离所有依赖项(例如 udfs)并确保您了解它们对 proc 的贡献 - 有时 udf 可能会给您提供您无法通过其他方式收集到的洞察力

    【讨论】:

      【解决方案4】:

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

      首先通过删除 sproc 声明并声明和初始化每个需要的参数,将存储过程变成标准 sql。

      运行 sproc 的增量部分,并检查结果以了解发生了什么。通过打印变量或临时表来做到这一点,或者只是通过修改输出到屏幕而不是临时源。

      并确保您记录/拆分/重写您最终找到的内容 - 您不希望其他人也必须这样做,对吗?

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

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

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

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-01-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-06-10
              相关资源
              最近更新 更多