我们最近不得不对第三方产品使用的 OpenEdge 数据库进行一些工作,今天(经过一番费力的努力),我们终于确定了为什么视图没有返回结果。这个有问题的视图组合了大约 100 个单独的表,然后进行查询(我们对此数据库的权限有限)。该视图返回的字段之一是硬编码的字符串文字,类似于

'John Smith' AS TheName

我们在运行包含此字符串的查询时遇到困难,我们尝试对其进行 RTrim(视图返回大量尾随空格),然后与另一个字段连接。但是,如果我们在此字段上使用 RTrim,则不会返回错误消息或 null 或类似内容,而是不会返回该行。我们并没有尝试在 WHERE 子句或 JOIN 中使用它,这只是 SELECT 的一部分...来自视图名称。查看视图后,似乎视图错误地将字符串的长度检测为 9 个字符(定义中未指定长度),并且 RTrim 不起作用。现在,我可以理解为什么这可能会导致错误消息或 SELECT 中的 NULL 值,但是 为什么根本不返回该行?这看起来不像是好的 SQL 行为,而且我从未在任何其他 RDBMS 中看到过这种情况。

其他信息:我们正在通过 ODBC 和 WinSQL 测试查询,以期将其包含在现有的 ASP.NET 应用程序中。尽管我们确实有权创建视图,但除此之外我们无法访问后端。

更新 :作为一个奇怪的后续行动,我们现在发现,如果我们尝试在没有任何 WHERE 子句的情况下查询此视图,则不会返回任何记录。这可能有同样的原因。

有帮助吗?

解决方案

这听起来可能与进度数据库中的SQL-WIDTH有关。 Progress的一个问题是,如果字段的内容超过SQL-WIDTH,那么您将获得奇怪的SQL行为(有时驱动程序可能会失败,有时则无法获得结果)。

要识别这一点,您需要使用 dbtool 命令检查可能超出的SQL-WIDTH。

其他提示

确保没有空格。修剪不会删除空格,只会删除空格。空白也不是空值。字符集存在差异,但在编辑器中没有明显差异。我在 DBII、Oracle、PostGreSQL 等数据库中遇到过这个问题。检查编辑器的字符集并尝试查看表格,您可能什么也看不到,或者可能看到大矩形。

这听起来很奇怪。只需在它周围编码,在应用程序中进行修剪和/或字符串操作,然后继续。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top