2009-09-09 42 views
1

最近,我们不得不这样做与现在第三方产品使用的是OpenEdge数据库,以及一些工作(后多头发拉扯),我们终于确定为什么一个观点没有返回结果。 有问题的这个视图结合了大约100个独立的表格,然后被查询(我们对此数据库的权限有限)。一个由该视图返回的领域之一,是一个硬编码字符串字面量,沿怪异OpenEdge查询行为

'John Smith' AS TheName 

当我们正在运行,其中包括这个字符串,我们试图RTRIM查询难度线(视图返回了很多尾随空格),然后与另一个字段连接。 但是,如果我们在这个字段上使用了RTrim,那么不是返回一个错误消息,或者是一个null或者类似的东西,这个行就不会被返回。我们没有试图在WHERE子句或JOIN中使用它,这只是SELECT ... FROM VIEWNAME的一部分。查看视图后,视图似乎错误地将字符串的长度检测为9个字符(定义中未指定长度),RTrim无法正常工作。 现在,我可以理解为什么这可能会导致错误信息,或在SELECT NULL值,但为什么会行根本就没有在所有回来了?这看起来不像是很好的SQL行为,我从来没有见过其他任何RDBMS发生过。

其他信息:我们是通过ODBC和WinSQL的测试查询,以这个被包含在现有的ASP.NET应用程序。我们无法访问后端,除非通过此操作,尽管我们有权创建视图。

更新:作为一个奇特的后续,我们现在已经发现,如果我们试图查询这个观点没有任何WHERE子句,没有记录返回。这可能有同样的原因。

回答

1

这听起来像它可能与进度数据库中的SQL-WIDTH。 Progress的一个问题是,如果字段的内容超过了SQL-WIDTH,那么你会得到奇怪的SQL行为(有时候驱动程序可能会失败,而其他时候你会得不到结果)。

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

+0

稍微阅读后,这听起来是一个奇怪的但似是而非的原因。可悲的是我无法测试它的确定。 – MartW 2009-12-02 13:01:18

+0

您没有权限访问进度命令或进度DBA来验证宽度吗?进度数据库本质上是非常奇怪的,它们不像其他传统的SQL数据库。 – 2009-12-02 13:08:10

0

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

1

确保你没有空白。修剪不会删除空白仅空格。空白也不是空值。字符集有所不同,但它在编辑器中并不明显。 我遇到过几个数据库,DBII,Oracle,PostGreSQL。检查编辑器的字符集并尝试查看表格,您可能看不到任何东西,或者您可能会看到大矩形。