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。

复制代码
--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:

BULK INSERT (Transact-SQL)

作者悦光阴
本文版权归作者和博客园所有,欢迎转载,但未经作者同意,必须保留此段声明,且在文章页面醒目位置显示原文连接,否则保留追究法律责任的权利。
分类: SQL Server
标签: TSQL, Bulk Insert






本文转自悦光阴博客园博客,原文链接:http://www.cnblogs.com/ljhdo/p/5604912.html,如需转载请自行联系原作者
目录
相关文章
|
14天前
|
自然语言处理 关系型数据库 MySQL
如何在mysql数据库里进行文本的相似度排序?
【8月更文挑战第28天】如何在mysql数据库里进行文本的相似度排序?
180 62
|
10天前
|
自然语言处理 关系型数据库 MySQL
match如何在mysql数据库里进行文本的相似度排序?
【9月更文挑战第1天】match如何在mysql数据库里进行文本的相似度排序?
26 1
|
15天前
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
|
21天前
|
SQL 数据可视化 关系型数据库
成功解决7版本的数据库导入 8版本数据库脚本报错问题
您提供的链接是一篇关于如何解决在MySQL数据库中导入脚本时出现版本兼容性问题的博客文章。文章中提到,如果在MySQL 5.7之前的版本中使用utf8mb4_0900_ai_ci排序规则,会遇到"Unknown collation"错误。解决办法包括升级MySQL版本到8.0或更高,或者更改排序规则为utf8mb4_general_ci或utf8mb4_unicode_ci,并提供了修改SQL脚本的示例。 如果您需要更详细的信息或有其他问题,请告诉我。
|
1月前
|
SQL 关系型数据库 BI
关系型数据库SQL server INSERT 语句
【8月更文挑战第3天】
44 9
|
2月前
|
关系型数据库 MySQL 数据库
使用Python读取xlsx表格数据并导入到MySQL数据库中时遇到的问题24
【7月更文挑战第24天】使用Python读取xlsx表格数据并导入到MySQL数据库中
54 7
|
28天前
|
SQL 关系型数据库 MySQL
如何在 MySQL 或 MariaDB 中导入和导出数据库
如何在 MySQL 或 MariaDB 中导入和导出数据库
96 0
|
28天前
|
JSON NoSQL MongoDB
在Ubuntu 14.04上如何导入和导出MongoDB数据库
在Ubuntu 14.04上如何导入和导出MongoDB数据库
13 0
|
28天前
|
安全 关系型数据库 MySQL
如何在 MySQL 中导入和导出数据库以及重置 root 密码
如何在 MySQL 中导入和导出数据库以及重置 root 密码
27 0
|
2月前
|
分布式计算 DataWorks 关系型数据库
阿里云数加-分析型数据库AnalyticDB数据导入的多样化策略
通过合理利用这些数据导入方法,用户可以充分发挥AnalyticDB的实时计算能力和高并发查询性能,为业务分析和决策提供强有力的数据支持。