【问题标题】:Use SQL Debugger when stored proc called by an external process外部进程调用存储过程时使用 SQL 调试器
【发布时间】:2018-04-18 13:58:12
【问题描述】:

SQL 调试器是否有类似“调试附加”的功能?我有一个中间件工具 (BizTalk),它正在调用存储过程并希望对其进行调试。

作为替代方案,我尝试添加要插入到跟踪表中的语句,但 BizTalk 在失败时回滚事务。我添加了打印语句,但在外部运行时无法看到它们。我一直在使用 SQL_profiler,它有点帮助,但看不到变量的值。

根据@Jeroen 的评论,我尝试了 sp_trace_generatedevent,但只能在探查器中看到它。我对我的 DBName 进行了过滤,并打开了所有 userConfigureable 事件。

【问题讨论】:

  • 为什么不在 SQL Server 中创建一个新查询,在查询中执行存储过程并传入您将从 BizTalk 传递的值,然后在调试模式下运行它并进入您的存储过程?
  • 调试实时 SQL Server 接近于黑魔法。我敢肯定它可以做到...但我从未见过有人这样做并活着讲述这个故事。考虑连接分析器并捕获RPC:Completed 事件,这将为您提供参数值。这和备份让您在调试棘手的情况方面取得了长足的进步。
  • 有没有办法将变量存储在临时表中?
  • 参数是 5 个用户定义的表类型,每个可能有 10-25 列,所以我认为使用我自己的 Exec 语句进行设置需要相当大的意志力。当 BizTalk 检测到中止时,临时表会回滚,因为我在某处遇到强制转换错误。
  • 你不能在探查器跟踪中捕捉到它吗?

标签: sql-server


【解决方案1】:

sp_TraceGenerateEvent 对于将数据写入探查器很有用。 (此处使用示例:https://blogs.technet.microsoft.com/fort_sql/2012/06/21/capture-custom-events-in-profiler-for-troubleshooting/)

请注意,当 BizTalk 调用存储过程时,它有两次传递,一次使用 FmtOnly=On,第二次(实际执行)使用 FmtOnly=Off。如果您在第一遍中出现某些错误,您可能无法到达第二遍。 Getting sp_tracegenerateevent to work in a stored procedure

当 FmtOnly=On 时,跟踪配置文件可能会令人困惑,导致您相信它实际上只是在检查将返回哪些数据/列时正在运行。 Can SQL Begin Try/Catch be lying to me (in the profiler)?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    • 2011-11-28
    • 2015-07-08
    • 1970-01-01
    相关资源
    最近更新 更多