csv 匯入 sqlserver 的資料類型問題

來源:互聯網
上載者:User

遇到一個問題,把scv匯入資料庫時,數位被自動認為是int,然而超過int範圍的值統統被讀成null進表。

 

解決辦法是在csv檔案下,建立一個名為Schema.ini的檔案。格式如下:

 

 

 

Schema.ini格式如下(參考:MSDN主題 Schema.ini File):

Schema.ini用於提供文本資料中的記錄規格資訊。每個Schema.ini的條目用於指明表的5個特徵之一:

文字檔名
檔案名稱有方括弧括起來,例如如果要對Sample.txt使用Schema,那麼它的對應的Schema條目應該是

[Sample.txt]

檔案格式
指令如下:

Format=Value

Value可以取下面的值之一:

TabDelimited 用Tab分隔

CSVDelimited 用逗號分隔

FixedLength 固定長度

Delimited(C) 指定字元,其中C可以為除了雙引號(")外的任何字元,也可以為空白

欄位名、欄位寬度和類型
格式為:Coln=欄位名 資料類型 [width 寬度]

欄位名可以是任一字元,如果欄位名包含空格,請使用雙引號括起來。

資料類型可以為:

Bit

Byte

Short(Integer)

Long

Currency

Single

Double(Float)

DateTime(Date DateFormat)

Text(Char)

Memo(LongChar)

其中DateFormat是日期的格式字串例如:Date YYYY-MM-DD

字元集
格式:CharacterSet=ANSI | OEM

格式只有兩種:ANSI和OEM

特殊資料類型轉換
特殊資料類型轉換一般使用的比較少,主要是自訂日期、貨幣等等的資料格式,一般不用理會。在此也不作詳細敘述。請自己查看MSDN協助:Schema.ini File

 

 

下面給出一個簡單的例子,假設有一個表Contacts.txt類似下面:

First NameLast NameHireDate

Nancy Davolio 10-22-91

Robert King 10-23-91

那麼Schema.ini個是類似下面的INI檔案(我加了注釋):

[Contacts.txt] ///需要匯入的文字檔名

ColNameHeader=True ///是否有資料頭

Format=FixedLength ///欄位固定長度

MaxScanRows=0 ///最多匯入行

CharacterSet=OEM ///字元集

Col1="First Name" Char Width 10 ///第一列格式

Col2="Last Name" Char Width 9 ///第二列格式

Col3="HireDate" Date Width 8 ///第三列格式

////依此類推

我們可以根據資料自動建立這個Schema.ini檔案!

注意,Schema.ini必須和需要匯入的文字檔在同一目錄!!!如果不在同一個目錄,必須指定Schema.ini的全路徑!

此後,我們就可以利用下面的語句來匯入資料了:

DoCmd.TransferText acImportFixed, , "Contacts", "C:Documents.txt"

或者

DoCmd.TransferText acImportFixed, "C:Documents.ini", "Contacts", "C:Documents.txt"

下面給出TransferText的文法(摘自Access協助):

DoCmd.TransferText [TransferType][, SpecificationName], TableName, FileName[, HasFieldNames][, HtmlTableName][, CodePage]

TransferType 可選 AcTextTransferType。

AcTextTransferType 可以是下列 AcTextTransferType 常量之一:

acExportDelim

acExportFixed

acExportHTML

acExportMerge

acImportDelim 預設

acImportFixed

acImportHTML

acLinkDelim

acLinkFixed

acLinkHTML

如果將該參數留空,則採用預設常量 (acImportDelim)。

SpecificationName 可選 Variant 型。字串運算式,表示在當前資料庫中建立並儲存的匯入或匯出規格的名稱。對於固定長度的文字檔, 必須指定參數或使用 schema.ini 檔案,該檔案還必須儲存在匯入、連結或匯出的文字檔的同一個檔案夾中。若要建立一個方案檔案, 可使用文本匯入/匯出嚮導建立此檔案。對於分隔的文字檔和 Microsoft Word 合併列印資料檔案,可以將該參數留空,以便選擇預設的匯入/匯出規格。

TableName 可選 Variant 型。字串運算式,表示要向其匯入文本資料、從中匯出文本資料或連結文本資料的 Microsoft Access 表的名稱,或者要將其結果匯出到文字檔的 Microsoft Access 查詢的名稱。

FileName 可選 Variant 型。字串運算式,表示要從中匯入、匯出到或連結到的文字檔的完整名稱(包括路徑)。

HasFieldNames 可選 Variant 型。使用 True (-1) 可以在匯入、匯出或連結時,使用文字檔中的第一行作為欄位名。使用 False (0) 可以將文字檔中的第一行看成普通資料。如果將該參數留空,則採用預設值 (False)。該參數將被 Microsoft Word 合併列印資料檔案忽略,這些檔案的第一行中必須包含欄位名。

HTMLTableNam 可選 Variant 型。字串運算式,表示要匯入或連結的 HTML 檔案中的表或列表的名稱。除非 transfertype 參數設為 acImportHTML 或 acLinkHTML,否則該參數將被忽略。如果將該參數留空

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.