2009-09-09 77 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。檢查編輯器的字符集並嘗試查看錶格,您可能看不到任何東西,或者您可能會看到大矩形。