我们最近不得不对第三方产品使用的 OpenEdge 数据库进行一些工作,而今天(经过一番折腾),我们终于确定了为什么视图没有返回任何结果。这个有问题的视图组合了大约 100 个单独的表,然后被查询(我们对该数据库的权限有限)。此视图返回的字段之一是硬编码的字符串文字,类似于
'John Smith' AS TheName
我们在运行包含此字符串的查询时遇到困难,我们试图对其进行 RTrim(视图返回大量尾随空格),然后与另一个字段连接。但是,如果我们在此字段上使用 RTrim,则不会返回错误消息或 null 或类似的内容,而是根本不返回该行。我们没有尝试在 WHERE 子句或 JOIN 中使用它,这只是 SELECT ... FROM VIEWNAME 的一部分。查看视图后,似乎视图错误地将字符串的长度检测为 9 个字符(定义中未指定长度),而 RTrim 只是不起作用。现在,我可以理解为什么这可能会导致错误消息或 SELECT 中的 NULL 值,但为什么根本不会返回该行? 这似乎不是好的 SQL 行为,我从未见过任何其他 RDBMS 发生这种情况。
其他信息:我们正在测试通过 ODBC 和 WinSQL 进行查询,以期将其包含在现有的 ASP.NET 应用程序中。尽管我们确实有权创建视图,但我们无权访问后端,除非通过这个。
更新:作为一个奇怪的后续行动,我们现在发现,如果我们尝试在没有任何 WHERE 子句的情况下查询此视图,则不会返回任何记录。这可能有相同的原因。