Migration

導入不同欄位格式的外部數據

  • December 4, 2014

我在 Excel 中有如下源文件:

項目——-參考—描述

-400020–20045——-尺子 60cms

8900032–20012——-橡皮擦 45gr

注意:因為我可以在這裡添加很多空格,所以破折號“-”表示原始文件上的一個空格 Item 400020 在源文件的 4 之前帶有一個空格。

以下文件是以正確格式導出到我們的數據庫的預期文件

項目——–參考—描述

0400020–0020045–

尺子 60cms 8900032–0020012–橡皮擦 45gr

看來您需要先將excel表格中的數字轉換為字元,然後調整數據(空格)。導出為 CSV,然後導入數據庫。我想您在表中有 varchar 數據類型ItemReference列。

使用 Excel 的歷史使我確信不應依賴 Excel 格式。事實上,它很難即時影響。

假設 Microsoft SQL Server,您可以使用連結伺服器查詢從 Excel 電子表格中讀取數據,或者您可以將數據載入到臨時表中。如:

CREATE TABLE dbo.StagingExcel
(Item CHAR(7),
Reference CHAR(7),
Description VARCHAR(50));

將數據載入到StagingExcel表中,然後將格式正確的數據傳輸到目標表。例如

INSERT INTO dbo.YourTargetTable (Item, Reference, Description)
SELECT RIGHT(REPLICATE('0',7) + Item,7),
      RIGHT(REPLICATE('0',7) + Reference,7), 
      Description
FROM dbo.StagingExcel -- (or the Excel linked server)

**編輯:**我對 Excel 格式的評論只是你還必須控制 Excel 列。如果 Excel 電子表格全部定義為文本列,則結果是可預測的。

AutoFormat在下面的三列中,我在和列中鍵入了相同的字元串Text,但看看它們的顯示方式有何不同。然後我將值複製AutoFormatAutoFormatToText列中並獲得了AutoFormat值,但證明為Text.

**AutoFormat    Text       AutoFormatToText**
 12/21/1934    12/21/34   12/21/1934
      12345    12345      12345
        123    000123     123

您的評論似乎暗示前兩列組合成一個鍵值。假設格式是兩個 0 對齊的 7 個字元列變成一個 14 個字元的列,您只需連接兩列。片段:

      ...
      RIGHT(REPLICATE('0',7) + Item,7) + 
      RIGHT(REPLICATE('0',7) + Reference,7), 
      ...

引用自:https://dba.stackexchange.com/questions/84301