最近,我们不得不这样做与现在第三方产品使用的是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子句,没有记录返回。这可能有同样的原因。
稍微阅读后,这听起来是一个奇怪的但似是而非的原因。可悲的是我无法测试它的确定。 – MartW 2009-12-02 13:01:18
您没有权限访问进度命令或进度DBA来验证宽度吗?进度数据库本质上是非常奇怪的,它们不像其他传统的SQL数据库。 – 2009-12-02 13:08:10