fix(ddic): Data Preview 400 报错携带 SAP 原文 + 纠正 SQL 方言结论(= 需两侧空格,非不支持)

This commit is contained in:
coordinator
2026-09-11 02:00:50 +08:00
parent 53ea2d854d
commit f9d08774fd
6 changed files with 55 additions and 23 deletions
+8 -5
View File
@@ -120,21 +120,24 @@ NW 7.40 的 double-activate 已内置在 sap-cli 中。如果 activate 仍然失
| HTTP 423 (Transport lock) | 对象绑定在传输请求中 | 报告用户,SE09 处理 |
| 激活失败仍 inactive | NW 7.40 ADT 限制 | sap-cli 已内置 double-activate,仍失败则报告用户去 SE09 |
| `WITH EMPTY KEY` 运行 dump | NW 7.40 不支持 | 修改为 `WITH NON-UNIQUE KEY``WITH DEFAULT KEY` |
| HTTP 400 (Data Preview) `A Boolean expression was expected in <字段>=` | ADT Data Preview freestyle SQL **不支持 `=` 比较**(实测`WHERE f='x'`→400`WHERE f IN ('x')`200 | `IN (...)` `LIKE '...'`,不要用 `=` |
| HTTP 400 (Data Preview) `A Boolean expression was expected in <字段>=` | **运算符两侧缺空格**`WHERE f='x'` 解析失败(`=` 被黏在值上);`WHERE f = 'x'`(有空格)实测 200 | 运算符两侧留空格,或一律`IN (...)` / `LIKE '...'` |
| HTTP 400 (Data Preview) `elements in the SELECT LIST list must be separated using commas` | 选择列必须逗号分隔(`SELECT a b` 报错) | 写成 `SELECT a, b FROM t` |
| `info` 的「传输请求」恒为 `(无法获取)` | `_query_transport_request``=` + 单引号查 E071,在该方言下必然 400(异常被吞,故静默失败) | 改为 `WHERE object IN ('...') AND obj_name IN ('...')` |
| HTTP 400 (Data Preview) `未知的列名称 "<COL>" until runtime` | SELECT/WHERE 用了**不存在的列名**(如 DD02T 没有 `LANGUAGE`/`MASTERLANG`,语言列是 `DDLANGUAGE`) | 先确认 DDIC 列名再查;报错已携带 SAP 原文 |
| `info` 的「传输请求」恒为 `(无法获取)` | (已修复)旧版 `_query_transport_request` 用无空格 `=` 查 E071 必 400 且异常被吞 | 已改 `IN (...)` 并区分「无」与「无法获取」 |
## ADT Data Preview SQL 方言(NW 7.40 实测,2026-09-11
## ADT Data Preview SQL 方言(NW 7.40 实测,2026-09-11 二次修订
用于补 ZMM_BIP 系列等元数据时,本系统 `/sap/bc/adt/datapreview/freestyle` 的 SQL 解析器只接受很窄的子集
用于补 ZMM_BIP 系列等元数据时,本系统 `/sap/bc/adt/datapreview/freestyle` 的 SQL 解析器要求
| 能力 | 实测结果 |
|------|----------|
| `SELECT f1, f2 FROM t`(逗号分隔) | ✅ 200 |
| `WHERE f = 'a'`(**运算符两侧有空格** | ✅ 200(2026-09-11 复测纠正:早前「不支持 =」的结论是探针写法无空格所致) |
| `WHERE f='a'`**无空格** | ❌ 400 `A Boolean expression was expected` |
| `WHERE f IN ('a','b')` | ✅ 200 |
| `WHERE f LIKE 'ZMM%'` | ✅ 200 |
| `WHERE f = 'a'` | ❌ 400 `A Boolean expression was expected` |
| `SELECT f1 f2`(无逗号) | ❌ 400 要求逗号分隔 |
| `SELECT <不存在的列>` | ❌ 400 `未知的列名称 "X" until runtime`SAP 原文会指明列名) |
| 无 WHERE 全表 | ✅ 200(但行数受行数参数与授权限制) |
**可用的元数据来源(本机实测)**