2014-09-18 87 views
0

我正在使用名爲FME Desktop的軟件。在這個軟件中,我們可以通過稱爲變換器的項目發出SQL命令。我使用一個名爲SQLExecutor的轉換器,它使用一個非常簡單的查詢來進行比較。下面是我試圖用這個SQL查詢做的一個解釋,以及它在嘗試比較兩個文本字段時不起作用的事實。SQL - 比較2個文本字段

我相信我的問題是SQLExecutor中使用的SQL的限制。比方說,我有一層名爲TEST.LEASE的數據,我想根據一個唯一的ID字段將其與名爲EDIT.LEASE的圖層進行比較。這兩個圖層都在同一個數據庫中。我們使用SQL Server來存儲數據。兩個圖層中都有一個名爲GIS_ID的TEXT字段。這是一個唯一的ID字段。那麼會發生什麼呢,我們會在我們的LEASE層上得到更新,並且他們開始被加載到TEST.LEASE。當我們完成了數據的質量保證/質量控制並且我們確信他們已經準備好上傳到EDIT.LEASE後,我們運行一個FME作業作爲我們的推廣工具。此促銷工具所做的工作是檢查TEST.LEASE中的各個字段以確保其符合上傳要求(此部分無任何問題均可100%運行)。

就在它們被提升到EDIT.LEASE之前,我們需要知道這是否是一個全新的記錄,在這種情況下,我們將使用FME進行INSERT。如果碰巧GIS_ID已經存在,那麼我們需要對這些記錄進行更新。我們所用的工具完全可以用來確定它是INSERT還是UPDATE,除了一個看起來很小的東西......只有在文本字段包含一個沒有字母的數字時,它才起作用。

供參考:我們公司的某個人決定將GIS_ID字段設置爲文本字段。在我看來,它應該是一個整數場,因爲比較會非常容易。但我現在無法改變這種情況,這已經被那些讓我賺更多錢的人決定了,因爲它會成爲一個文本領域。

如上所述... GIS_ID是一個文本字段(在兩個圖層中它們都是相同的大小,兩個圖層中的字段沒有區別)。您可能知道,當該字段中包含的所有內容都是數字時,SQL不關心它是TEXT字段還是INTEGER字段。它仍然可以比較202到202,看看它們是否相等。對於我的示例,假設我在TEST.LEASE和EDIT.LEASE中都有一個記錄,其中兩個GIS_ID字段等於09198760.當我在下面運行查詢時,它完美運行。

select OBJECTID 
from TEST.LEASE_UPDATE_INSERT_WRITER 
where GIS_ID = @Value(GIS_ID) 

就像我剛纔提到的那樣,如果兩個GIS_ID文本字段都只有數字,它就可以完美地運行數據。但是,如果只有一條記錄包含實際的字母,則SQL查詢將會出錯。

因此,如果GIS_ID具有09198760a01,那麼一旦查詢到達GIS_ID中的「a」,就會返回一個SQL錯誤。我不想找到一種方法讓作業繼續並忽略這些記錄,因爲我需要加載所有記錄。我需要知道是否有人會知道如何添加或重寫上面的查詢,以便它加載「僅數字文本字段」和「包含字母字段的數字」。

我希望長時間的解釋清楚。如果不是,請告訴我。感謝您的幫助,您也許能提供給我

真誠, 德州

回答

0

傑夫是正確的,作爲常規的SQL用戶,甚至在他們的應用程序代碼中使用SQL的人一個通用的答案,如果你是比較文中提到的操作,那麼你需要使用單引號。

其中安勤=「myvalue的」

否則的SQL Server認爲它是一個int,因此爲什麼它的工作原理時,他的傳球中值​​僅爲數字。當你傳遞參數時,並不總是容易說出問題所在。

凡安勤= @myvalue

所以你需要注意這一點。只是想提到這個,所以也許它可以幫助其他有類似問題的人。當我們從一個連接id字段的字段中得到錯誤時,我想到了這一點,即它在值= 2時有效,但不是2,3等。使用單引號包裹參數容易修復,因爲我們確實只關心在我們的例子中值='2'。

希望這是有道理的。