【问题标题】:Debugging a qbo3 Statement调试 qbo3 语句
【发布时间】:2022-10-21 01:53:38
【问题描述】:

我有一个导致错误的 qbo3 语句。当我调用该语句时,我被引导到一个错误页面,该页面没有包含足够的信息来帮助我确定问题的根本原因。

qbo3 是否包含任何工具来协助调试语句?

【问题讨论】:

    标签: sql-server qbo3


    【解决方案1】:

    在 qbo3 中创建的 Custom statements 可以从 Templates > Reports > Ad-Hoc Report 进行调试。

    您可以使用此工具迭代地测试和修复您正在设计的任何语句。

    在下面的屏幕截图中,为测试设置了语句 Foreclosure/B2BDataStore

    笔记:

    • ModuleForeclosure
    • QueryBasic
    • Base StatementB2BDataStore
    • Payload 包含您希望传递给语句的任何参数的查询字符串

    Results面板中,我们可以看到SQL server报告的错误,包括:

    Msg 209, Level 16, Line 20
    Ambiguous column name 'ProcessID'.
    ...
    Msg 207, Level 16, Line 238
    Invalid column name 'ProcessProcessTemplateID'.
    

    要查看正在处理的实际 SQL,请选中 Debug Statement 复选框。 qbo3 不会执行语句的 SQL,而是生成 SQL 并将其显示在结果面板中。

    在这种特殊情况下,罪魁祸首是:

    SELECT ...
      ProcessID,
      ...
    FROM Bankruptcy
      INNER JOIN Process ON Process.ProcessID = Bankruptcy.ProcessID
    WHERE Process.UpdatedDate >= @FromDate
    

    由于BankruptcyProcess 表都包含ProcessID 列,因此正确的语法是明确要返回哪个表的ProcessID

    SELECT ...
      Process.ProcessID,
      ...
    FROM Bankruptcy
      INNER JOIN Process ON Process.ProcessID = Bankruptcy.ProcessID
    WHERE Process.UpdatedDate >= @FromDate
    

    第二个错误似乎只是一个错字:

    ProcessProcessTemplateID
    

    应该

    Process.ProcessTemplateID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-05
      • 2021-12-08
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      相关资源
      最近更新 更多