2011-01-26 60 views
0

我正在將數據從平面文件中提取到SQL Server 2008表中。它包含我需要進行匹配的地址信息,所以我需要清理一些數據。清理SQL Server 2008中的傳入字符串字段的有效方法?

我創建了一個通用縮寫/術語表及其官方美國郵局對應表,然後創建一個函數,該函數可以接受地址字符串,並使用replace和縮寫表中的數據返回已清理的地址字符串。

在導入後在表格上運行UPDATE,並在地址字段上執行SET,該函數返回的字符串很好,但速度很慢。我對SQL相當陌生,有沒有更好的方法來做到這一點?也許在插入之前在SSIS導入期間?

+0

您是否考慮過在輸入數據時從官方數據源驗證數據?或者,對於現有數據,只需在導入之前通過清理(或「清理」)服務來運行地址列表它? – Matt 2012-01-23 22:17:52

回答

2

您可以將其作爲查找來執行,也可以將數據放入臨時表中,然後使用execute sql任務清理臨時表,然後使用數據流執行到表的導入操作。我更喜歡這樣做,原因有幾個。首先,我將數據傳輸到兩個表中,一個清理,一個與文件中的數據完全一樣。這樣,我可以查詢數據的未編輯版本,我可以查詢的數據的編輯版本以及真實表格中的數據。這有助於我研究數據導入問題。我可以很容易地看到問題是由於我的清理或他們發送的東西或由於數據存儲方式(可能是pk/fk違規或某些要求它進入異常表(我也發送所有記錄如果無法導入,則將它們記錄到異常表中)進一步,我可以修復清理過程,如果沒有連續運行冗長複雜的耗時過程而發生錯誤(並且在我確信它已經存在之前沒有進入活動表一旦修復完成,通常我所要做的就是部署新版本的存儲過程,而不是整個SSIS包。我發現這是能夠將數據導入和支持數據導入的最佳模式,他們改變了。

1

這聽起來像是在這種情況下,在SSIS包中,您可以對常用術語表執行查找,加入地址,然後輸出乾淨地址,然後將乾淨地址傳遞到目標表中。這會在加載後切斷更新步驟。

+0

我還沒有嘗試查找轉換,我的地址字段是一個完整的地址,如「1234北榆樹街」,我的條款表已經爲像| North | N |和| Street | St |。鑑於數據的性質,可以使用Lookup嗎? – DKnight 2011-01-26 19:32:39