天天看點

Bulk Insert:将文本資料(csv和txt)導入到資料庫中

将文本資料導入到資料庫中的方法有很多,将文本格式(csv和txt)導入到SQL Server中,bulk insert是最簡單的實作方法

1,bulk insert指令,經過簡化如下

BULK INSERT schema_name . table_name 
FROM 'data_file' 
WITH 
(
FIELDTERMINATOR = 'field_terminator',
ROWTERMINATOR = 'row_terminator',
DATAFILETYPE=‘WideChar’
);      

2,使用bulk insert 将txt資料導入到資料庫中,文本資料使用Tab分割Column,使用換行符分割row。

Bulk Insert:将文本資料(csv和txt)導入到資料庫中
--create staging table
create table dbo.txt_staging
(
col1 nvarchar(255),
col2 nvarchar(255),
col3 nvarchar(255)
)
go

--populate data 
bulk insert dbo.txt_staging
from N'D:\test.txt'
WITH(
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR = '\n'
)      

3,使用bulk insert 将csv的資料導入資料庫中

CSV檔案使用“,”作為列分隔符,使用“\n”作為行分隔符

--populate data 
bulk insert dbo.txt_staging
from N'D:\abc.csv'
WITH(
    FIELDTERMINATOR = N',',
    ROWTERMINATOR = N'\n',
    CODEPAGE =N'raw'
)      

3,在導入Unicode時,需要将.txt文檔儲存為Unicode 編碼方式

Bulk Insert:将文本資料(csv和txt)導入到資料庫中

在使用bulk insert導入時,必須設定DATAFILETYPE='widechar',選項可能值有: 'char' | 'native'| 'widechar' | 'widenative' ,預設值是char。

如果有些Column沒有值,設定 KEEPNULLS   選項,表示将該column設定為NULL。

bulk insert dbo.txt_staging
from N'D:\abc.txt'
WITH(
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR = '\n',
    DATAFILETYPE ='widechar' ,
    KEEPNULLS
)      

附:Bulk Insert 指令的調用格式:

  • BULK INSERT  [ schema_name ] . [ table_name ]    
  • FROM 'data_file'    
  • [ WITH (Arguments)]

重要參數注釋:

  • ' data_file ':指定資料檔案的full path,bulk insert指令将資料從該檔案導入到Target Table中
  • ROWTERMINATOR = 'row_terminator' : 指定分隔行的字元,使用該字元來分割行(Row);
  • FIELDTERMINATOR = 'field_terminator' :指定分隔字段的字元,使用該字元來分割字段(Field或Column);
  • DATAFILETYPE = { 'char' | 'native'| 'widechar' | 'widenative' }:指定data file編碼(Encoding)的類型,推薦使用widechar編碼;
  • CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } :如果 data file 中含有單位元組(char或varchar)字元資料,使用CodePage參數指定字元列的CodePage;
  • BATCHSIZE = batch_size :指定一個batch包含的資料行數量,在将資料複制到Table中時,每一個Batch作為一個單獨的事務,如果一個batch複制失敗,那麼事務復原。預設情況下,data file中的所有資料作為一個batch。Specifies the number of rows in a batch. Each batch is copied to the server as one transaction. If this fails, SQL Server commits or rolls back the transaction for every batch. By default, all data in the specified data file is one batch. 
  • CHECK_CONSTRAINTS :指定在執行bulk insert操作期間,必須檢查插入的資料是否滿足Target Table上的所有限制。如果沒有指定 CHECK_CONSTRAINTS 選項,則所有 CHECK 和 FOREIGN KEY 限制都将被忽略,并且,在此操作之後,表上的所有限制将标記為不可信(not-trusted);   
  • FIRE_TRIGGERS :指定是否啟動Insert觸發器,如果指定該選項,每個batch成功插入後,會執行Insert觸發器;如果不指定該選項,不會執行Insert 觸發器;
  • KEEPIDENTITY :指定将data file中的辨別值插入到辨別列(Identity Column)中,如果不指定KeepIdentity選項,Target Table中的ID列會自動配置設定唯一的辨別值;  
  • KEEPNULLS:指定在執行bulk insert操作期間,空列(Empty Columns)應保留NULL值,而不是插入列的預設值
  • TABLOCK :指定在執行bulk insert操作期間,擷取一個表級鎖,持有表級鎖,能夠減少鎖競争(Lock Contention),提高導入性能

參考doc:

BULK INSERT (Transact-SQL)

作者

:悅光陰

出處

:http://www.cnblogs.com/ljhdo/

本文版權歸作者和部落格園所有,歡迎轉載,但未經作者同意,必須保留此段聲明,且在文章頁面醒目位置顯示原文連接配接,否則保留追究法律責任的權利。

繼續閱讀