將文本數據導入到資料庫中的方法有很多,將文本格式(csv和txt)導入到SQL Server中,bulk insert是最簡單的實現方法 1,bulk insert命令,經過簡化如下 2,使用bulk insert 將txt數據導入到資料庫中,文本數據使用Tab分割Column,使用換行符分割row ...
將文本數據導入到資料庫中的方法有很多,將文本格式(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。
--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導入時,必須設置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: