最近,我們不得不這樣做與現在第三方產品使用的是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