【发布时间】:2022-10-21 01:53:38
【问题描述】:
我有一个导致错误的 qbo3 语句。当我调用该语句时,我被引导到一个错误页面,该页面没有包含足够的信息来帮助我确定问题的根本原因。
qbo3 是否包含任何工具来协助调试语句?
【问题讨论】:
标签: sql-server qbo3
我有一个导致错误的 qbo3 语句。当我调用该语句时,我被引导到一个错误页面,该页面没有包含足够的信息来帮助我确定问题的根本原因。
qbo3 是否包含任何工具来协助调试语句?
【问题讨论】:
标签: sql-server qbo3
在 qbo3 中创建的 Custom statements 可以从 Templates > Reports > Ad-Hoc Report 进行调试。
您可以使用此工具迭代地测试和修复您正在设计的任何语句。
在下面的屏幕截图中,为测试设置了语句 Foreclosure/B2BDataStore:
笔记:
Module 是Foreclosure
Query 是Basic
Base Statement 是B2BDataStore
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
由于Bankruptcy 和Process 表都包含ProcessID 列,因此正确的语法是明确要返回哪个表的ProcessID:
SELECT ...
Process.ProcessID,
...
FROM Bankruptcy
INNER JOIN Process ON Process.ProcessID = Bankruptcy.ProcessID
WHERE Process.UpdatedDate >= @FromDate
第二个错误似乎只是一个错字:
ProcessProcessTemplateID
应该
Process.ProcessTemplateID
【讨论】: