我正在使用名爲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錯誤。我不想找到一種方法讓作業繼續並忽略這些記錄,因爲我需要加載所有記錄。我需要知道是否有人會知道如何添加或重寫上面的查詢,以便它加載「僅數字文本字段」和「包含字母字段的數字」。
我希望長時間的解釋清楚。如果不是,請告訴我。感謝您的幫助,您也許能提供給我
真誠, 德州