我们最近不得不在第三方产品使用的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子句的情况下查询此视图,则不会返回任何记录。这可能有相同的原因。
答案 0 :(得分:1)
确保没有空白。修剪不会仅删除空白空格。空白也不是空的。字符集有所不同,但在编辑器中没有明显不同。 我已经遇到了一些数据库,DBII,Oracle,PostGreSQL。检查编辑器的字符集并尝试查看表格,您可能看不到任何内容,或者您可能会看到大矩形。
答案 1 :(得分:1)
这听起来可能与进度数据库中的SQL-WIDTH有关。 Progress的一个问题是,如果字段的内容超过SQL-WIDTH,那么您将获得奇怪的SQL行为(有时驱动程序可能会失败,有时则无法获得结果)。
要识别这一点,您需要使用dbtool
命令检查可能超出的SQL-WIDTH。
答案 2 :(得分:0)
这听起来很奇怪。只需在它周围编码,在应用程序中进行修剪和/或字符串操作,然后继续。