SQL Server DBA(Database Administrator,資料庫管理員)發現他們經常使用 T-SQL 匯入和處理資料。為什麼呢?因為一些資料轉送需要技術成熟的 SQL 所具備的強大功能。最近我剛好完成了另一個資料匯入的案例,該案例觸動我彙編了一份供我使用的行為規範列表。
確保將載入的未經處理資料暫存為 varchar 資料類型
源自所謂的舊式系統的未經處理資料通常以文字格式設定傳送,因此我首先總是將未經處理資料載入一個單獨的暫存資料庫。我從不嘗試將資料直接載入一個成品資料庫。
我做的事情是將所有 原始文本資料載入相應的原始表,表中的列為 varchar 資料類型。(DTS 將自動完成該過程,這樣很好。但是,DTS 還會將列命名為 COL001,因此您不用事先提供列名。)varchar 的主要優點是它能夠接收任何資料 — 甚至是“壞”資料。如果您嘗試從一個沒有對使用者輸入的資料進行嚴格檢查的舊式系統載入資料,那麼被忽略的資料或寫入異常檔案的資料可能比載入的資料還多,如果您不想冒這樣的風險,除非接收每一個可能的值。將字元載入 varchar 資料類型的列則可以做到這一點。
在暫存表/列名時不要使用非字母數字字元
您可能無法控制在包含未經處理資料的表中如何對列進行初始命名,但是我會嘗試修改可能包含空格或其他非常規字元的舊式列名。當列名或表名包含非字母數位字元時,我們必須使用方括弧或雙引號對其進行分隔。這種代碼不但編寫起來比較困難,而且可讀性較差。
不要在列名中使用關鍵字
源自舊式系統的資料通常包含能夠破壞 SQL 查詢的描述性列名。例如,房地產資料可能會包含一個名為 KEY 的列,它用來反映放置在待售房屋上的鑰匙箱。然而,KEY 也是 T-SQL 中的一個關鍵字 (!),如果使用這樣的列名,查詢操作在直接引用該列名時將失敗。因此,最終您必須用方括弧或雙引號分隔含有關鍵字的列名。
確保使用正確的資料類型建立一個暫存表
下一步是建立一個或多個額外的暫存表,這些表有“正確的”資料類型。我喜歡使暫存表和目標 OLTP(Online Transaction Processing,聯機交易處理)資料庫中的目的表具有相同的列名。不管怎樣,重要的是未經處理資料中每列的資料類型在載入暫存時都將執行檢查並予以改正。在 SQL Server 表中找到壞資料比在載入失敗的外部檔案中找到壞資料容易得多。
確保將新列添加到暫存表中
當暫存資料沒有相應的列時,您可以添加這些列,然後拆分或合并載入的資料。例如,即使目的表分解出街道名和門牌號,地址仍然可能作為一個簡單的字串載入暫存表。那麼您可以在暫存表中添加街道名列和門牌號列,將舊式地址分解為兩個列。這樣做的優點是,未經處理資料與新拆分的資料並存,因此您能夠通過比較列來測試指令碼。
確保使用本機複本來測試填充的產品資料
當您準備好要插入暫存表的資料時,可以首先通過將其插入成品表的本機複本來測試這些資料。有時您只需清空表;有時,您必須填充表。
確保保留產品約束
在副表上總是保留產品約束。這樣,您就能夠測試暫存表資料滿足這些約束的程度。這些約束包括 NULL、預設值、檢查、主鍵和外鍵約束。首先保證副表列上的 NULL 或 NOT NULL 屬性與目標系統的相同,然後再逐步檢查其他所有約束。如果您的測試表明暫存資料插入過程滿足所有約束,那麼您距離成功就只有一步之遙了。
確保在一個產品資料副本上測試
雖然將匯入資料插入空表將遇到很多潛在的問題,但是不會遇到所有的問題。在通過了所有之前的測試後,確保您將在一個目標資料或成品系統的副本(或至少是一個合理的子集)上測試匯入。您能夠接收的最終錯誤類型將由資料配置決定,而且這是此項測試能夠檢測到的。那麼,您就能夠在資料庫副本中檢查結果,甚至可能將應用程式重新導向到該副本以便進一步測試和驗證。【專欄作家 Tom Moreau 補充說,“使用每日成品更新資料進行測試可以為資料移植做準備。如果原來的系統沒有足夠的約束而新系統有,那麼壞資料將進入原來的系統並破壞您的移植。” - Ed.】
如果匯入處理程序至此通過了所有測試,那麼您可能已經準備好進行匯入資料了,或者至少可以將匯入處理程序交給品質管理員 (QA, Quality Assurance) 了。
想尋找更多有關 SQL Server Professional 和 Pinnacle Publishing 的資訊,請訪問它的 Web 網站 http://www.pinpub.com。
註:該網站不是 Microsoft Corporation 的網站。Microsoft 對該網站的內容不承擔責任。
本文轉述自 2005 年 6 月一期的 SQL Server Professional。著作權 2005,Pinnacle Publishing, Inc.,除非另行說明。著作權所有,並保留一切權利。SQL Server Professional 是 Pinnacle Publishing, Inc. 的獨立製作出版物。未經 Pinnacle Publishing, Inc. 的事先許可,不得以任何形式(除了在評論性文章中的簡短引用外)使用或複製本文。要與 Pinnacle Publishing, Inc. 取得聯絡,請致電 1-800-788-1900。
轉到原英文頁面