為什麼 SQL Server uniqueidentifier 值在轉換為 Db2 時看起來不同?
我目前正在嘗試將 SQL Server 數據庫轉換為 DB2。我正在使用 IBM Data Studio 的數據轉換工作台 (DCW)。我遇到的問題是 DCW 似乎無法正確地將數據從 SQL Server 提取到平面文件中。
uniqueidentifier
DCW 未正確提取我的數據庫(在 SQL Server 中)中具有數據類型的所有列。任何屬於該uniqueidentifier
類型的數據都被寫入隨機符號和字元。可能是什麼原因?
我感覺到你的痛苦。我使用過 SQL Server 和 DB2。我承認恕我直言,數據提取和導入工具在 SQL Server 中的使用不像在 DB2 中那樣簡單或直接。
如果您希望堅持使用數據庫工具,我建議您:創建查詢以提取數據。使用 CONCAT 用字元(不會與您的數據衝突的字元)包圍每個欄位。希望您沒有數百萬行。然後執行查詢並將結果複製並粘貼到 Notepad++ 之類的文件中,並將其保存為 CSV 文件。您現在可以使用 db2import 更簡潔、更輕鬆地提取數據。笨重,是的。但它是我發現的最好的。我還沒有找到一種簡單的方法來使用 bcp 或 SSIS 來完成 db2import、db2load 和 db2export 所做的事情……
無論如何,如果這不符合您的喜好,或者如果數據集太大,您可能希望考慮使用不同的工具。有 ETL 工具(也許你有一個商店?)來移動數據。Microsoft 的 SQL Server Integration Services (SSIS) 或 IBM 的 InfoSphere DataStage 只是其中的兩個範例。(我並沒有真正使用過 SSIS,我嘗試過的很少,與 db2export 相比,它對我來說並不簡單或直覺。但也許這只是我,我需要進一步的接觸/培訓。)
另一種工具(我不僅是 DBA,而且還是 Java 開發人員,我可以碰巧利用這個工具)是利用現有的 API,例如純 JDBC 與 Apache POI 或 Apache Commons-CSV 來獲取提取的數據簡單的格式。POI 可讓您提取到 Excel 格式(.xls 和 .xlsx),而 Commons-CSV 顯然可以讓您提取到 CSV 格式。再一次,當您擁有 CSV 格式的數據時,很容易將數據導入/載入到 DB2 中。
這將有助於解決一些數據問題。您仍然可能需要抽查數據以確保您沒有任何程式碼頁轉換正在進行。如果是這樣,您可能需要在提取過程中處理它。
我意識到其他人會提到 bcp 或 SSIS。我只能說我經歷過的。但希望我已經給了你一些其他的選擇來考慮。
根據評論建構的答案:
您對平面文件有什麼期望?uniqueidentifier 是一個 16 字節的 GUID,因此在其本機格式中它只是一系列原始字節。(這將映射到 DB2 中的 CHAR(16) FOR BIT DATA)。– Ian Bjorhovde 2016 年 1 月 20 日 20:32
如前所述,GUID 只是一個 16 字節的值(如果需要,可以將其視為 128 位數字)。SQL Server 向您展示的是該數字的簡單通用表示,而 DB2 向您展示的是那些 16 字節的 ASCII 字元。如果您在查詢列時使用 HEX() 函式,您可能會看到更接近 SQL Server 表示的內容(但沒有不屬於列數據一部分的破折號;只是 SQL Server 使用的表示)– Dave Jones Jan 2016 年 21 月 21 日 12:22