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

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

  1. BULK INSERT schema_name . table_name
  2. FROM 'data_file'
  3. WITH
  4. (
  5. FIELDTERMINATOR = 'field_terminator',
  6. ROWTERMINATOR = 'row_terminator'
  7. DATAFILETYPE=‘WideChar
  8. );

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

  1. --create staging table
  2. create table dbo.txt_staging
  3. (
  4. col1 nvarchar(255),
  5. col2 nvarchar(255),
  6. col3 nvarchar(255)
  7. )
  8. go
  9.  
  10. --populate data
  11. bulk insert dbo.txt_staging
  12. from N'D:\test.txt'
  13. WITH(
  14. FIELDTERMINATOR = '\t',
  15. ROWTERMINATOR = '\n'
  16. )

3,使用bulk insert 将csv的数据导入数据库中
CSV文件使用“,”作为列分隔符,使用“\n”作为行分隔符

  1. --populate data
  2. bulk insert dbo.txt_staging
  3. from N'D:\abc.csv'
  4. WITH(
  5. FIELDTERMINATOR = N',',
  6. ROWTERMINATOR = N'\n',
  7. CODEPAGE =N'raw'
  8. )

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

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

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

  1. bulk insert dbo.txt_staging
  2. from N'D:\abc.txt'
  3. WITH(
  4. FIELDTERMINATOR = '\t',
  5. ROWTERMINATOR = '\n',
  6. DATAFILETYPE ='widechar' ,
  7. KEEPNULLS
  8. )

附: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)

Bulk Insert:将文本数据(csv和txt)导入到数据库中的更多相关文章

  1. 基于ASP.NET几十万数据几秒钟就可以导入到数据库中

    /// <summary> /// 一.构建模拟数据存放于DataTable /// </summary> /// <returns>DataTable</r ...

  2. Weka里如何将arff文件或csv文件批量导入MySQL数据库(六)

    这里不多说,直接上干货! 前提博客是 Weka中数据挖掘与机器学习系列之数据格式ARFF和CSV文件格式之间的转换(四) 1.将arff文件批量导入MySQL数据库 我在这里,arff文件以Weka安 ...

  3. c# SqlBulkCopy实现批量从数据集中把数据导入到数据库中

    今天遇到了一个导入类第一次见 SqlBulkCopy 可以实现从一个数据集导入到数据库中的表中 本来想从数据集中一条条遍历insert到库中 有了这个后发现: 只在把表与数据集的列做一下对应关系,再走 ...

  4. excel数据通过构建sql语句导入到数据库中

    拿到一张excel数据表格,数据格式如下图所示: 2.根据excel数据结果,构建保存excel数据的表结构 CREATE TABLE #tmpExcel(IP VARCHAR(100),IPAddr ...

  5. 解析excel文件并将数据导入到数据库中

    今天领导给安排了一个临时工作,让我将一个excel里面的数据解析后放入数据库中,经过一个下午的努力成功完成,现在将代码献上,希望对大家有所帮助 一.需要导入的jar 1.commons-collect ...

  6. 将 excel文件数据导入MySQL数据库中

    第一步:先将Excel文件另存为文本文件(制表符分割) 第二步:将生成的txt文件另存,并修改编码格式utf8; 第三步:将文件放到指定位置,或自己想要的位置: G:\city.txt 第四步:避免创 ...

  7. SQL语句:把Excel文件中数据导入SQL数据库中的方法

    1.从Excel文件中,导入数据到SQL数据库情况一.如果接受数据导入的表不存在 select * into jd$ from OPENROWSET('MICROSOFT.JET.OLEDB.4.0' ...

  8. 微软BI 之SSIS 系列 - 在 SSIS 中导入 ACCESS 数据库中的数据

    开篇介绍 来自 天善学院 一个学员的问题,如何在 SSIS 中导入 ACCESS 数据表中的数据. 在 SSIS 中导入 ACCESS 数据库数据 ACCESS 实际上是一个轻量级的桌面数据库,直接使 ...

  9. Java版将EXCEL表数据导入到数据库中

    1.采用第三方控件JXL实现 try { //实例化一个工作簿对象 Workbook workBook=Workbook.getWorkbook(new File("F://qzlx.xls ...

随机推荐

  1. Sublime配置python开发环境

    Package Control Package Control 是Sublime 里直接安装附加插件的包管理器.可以通过以下步骤手动安装: 1.点击Preferences > Browse Pa ...

  2. WPF 微信 MVVM 【续】发送部分QQ表情

    今天主要记录的就是发送QQ表情, WPF 微信 MVVM里写了,后期为了发送QQ表情,需要把TextBox替换为RichTextBox,接下来就说说替换的过程. 一.支持Binding的RichTex ...

  3. C#多线程之线程同步篇1

    在多线程(线程同步)中,我们将学习多线程中操作共享资源的技术,学习到的知识点如下所示: 执行基本的原子操作 使用Mutex构造 使用SemaphoreSlim构造 使用AutoResetEvent构造 ...

  4. 谈谈JS中的函数节流

    好吧,一直在秋招中,都没怎么写博客了...今天赶紧来补一补才行...我发现,在面试中,讲到函数节流好像可以加分,尽管这并不是特别高深的技术,下面就聊聊吧! ^_^ 备注:以下内容部分来自<Jav ...

  5. 简析服务端通过GT导入SHP至PG的方法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 项目中需要在浏览器端直接上传SHP后服务端进行数据的自动入PG ...

  6. ZKWeb网页框架1.3正式发布

    本次更新的内容有 更新引用包版本 Microsoft.AspNetCore.Hosting.Abstractions 1.1.0 Microsoft.AspNetCore.Http.Abstracti ...

  7. python之最强王者(9)——函数

    1.Python 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但 ...

  8. Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ...

    Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define ... 这个错误是因为有两个相 ...

  9. IOS之Objective-C学习 ARC下的单例模式

    单例模式是我常用的一种设计模式,最常见的用途就是用来保存数据并且传递数据.这都归功于单例模式的特性,首先就让我为大家简单介绍一下单例模式的特性. 单例模式的三大特性: 1.某个类只能有一个实例: 2. ...

  10. 真正的汉化-PowerDesigner 16.5 汉化

    一.背景 经常使用PowerDesigner,之前使用15版本,后来16出来后,就一直在使用16,不过一直是英文.一些同事对使用英文版总显示有些吃力. 遍寻百度.必应,都没有找到真正的针对版本16的汉 ...