txt存入mysql和csv_Bulk Insert:将文本数据(csv和txt)导入到数据库中

将文本数据导入到数据库中的方法有很多,将文本格式(csv和txt)导入到SQL Server中,bulk insert是最简单的实现方法

1,bulk insert命令,经过简化如下

BULK INSERTschema_name . table_nameFROM 'data_file'

WITH(

FIELDTERMINATOR= 'field_terminator',

ROWTERMINATOR= 'row_terminator',

DATAFILETYPE=‘WideChar’

);

2,使用bulk insert 将txt数据导入到数据库中,文本数据使用Tab分割Column,使用换行符分割row。

b79c11f3436241c9187081772d998c57.png

--create staging table

create tabledbo.txt_staging

(

col1nvarchar(255),

col2nvarchar(255),

col3nvarchar(255)

)go

--populate data

bulk insertdbo.txt_stagingfrom N'D:\test.txt'

WITH(

FIELDTERMINATOR= '\t',

ROWTERMINATOR= '\n')

3,使用bulk insert 将csv的数据导入数据库中

CSV文件使用“,”作为列分隔符,使用“\n”作为行分隔符

--populate data

bulk insertdbo.txt_stagingfrom N'D:\abc.csv'

WITH(

FIELDTERMINATOR= N',',

ROWTERMINATOR= N'\n',

CODEPAGE=N'raw')

3,在导入Unicode时,需要将.txt文档保存为Unicode 编码方式

2bb8e4f63320141a5f68ae6dc664756c.png

在使用bulk insert导入时,必须设置DATAFILETYPE='widechar',选项可能值有: 'char' | 'native'| 'widechar' | 'widenative' ,默认值是char。

如果有些Column没有值,设置 KEEPNULLS   选项,表示将该column设置为NULL。

bulk insertdbo.txt_stagingfrom N'D:\abc.txt'

WITH(

FIELDTERMINATOR= '\t',

ROWTERMINATOR= '\n',

DATAFILETYPE='widechar',

KEEPNULLS

)

附:Bulk Insert 命令的调用格式:

BULKINSERT  [ 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:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值