1

我们最近不得不对第三方产品使用的 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 子句的情况下查询此视图,则不会返回任何记录。这可能有相同的原因。

4

3 回答 3

1

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

于 2009-09-09T18:22:34.690 回答
1

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

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

于 2009-12-02T11:37:35.517 回答
0

这听起来像是非常奇怪的行为。只需围绕它编写代码,在应用程序中进行修剪和/或字符串操作,然后继续进行。

于 2009-09-09T17:12:51.930 回答