[数据库]Bulk Insert命令详细

Bulk Insert命令详细 

BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中。 
语法:

Sql代码 

  1. BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' }    
      
  2. WITH  (
      
  3.         [ BATCHSIZE [ = batch_size ] ],       
  4.         [ CHECK_CONSTRAINTS ],           
  5.         [ CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ],
      
  6.         [ DATAFILETYPE [ = 'char' | 'native'| 'widechar' | 'widenative' ] ],            
      
  7.         [ FIELDTERMINATOR [ = 'field_terminator' ] ],
      
  8.         [ FIRSTROW [ = first_row ] ],   
  9.         [ FIRE_TRIGGERS ],   
  10.         [ FORMATFILE = 'format_file_path' ],
      
  11.         [ KEEPIDENTITY ],   
  12.         [ KEEPNULLS ],   
  13.         [ KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ],      
  14.         [ LASTROW [ = last_row ] ],   
  15.         [ MAXERRORS [ = max_errors ] ],   
  16.         [ ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ],  
      
  17.         [ ROWS_PER_BATCH [ = rows_per_batch ] ],   
  18.         [ ROWTERMINATOR [ = 'row_terminator' ] ],          
      
  19.         [ TABLOCK ],   
  20. )  

[SQL] view
plain
copy

  1. BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' }      
  2. WITH  (  
  3.         [ BATCHSIZE [ = batch_size ] ],      
  4.         [ CHECK_CONSTRAINTS ],          
  5.         [ CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ],  
  6.         [ DATAFILETYPE [ = 'char' | 'native'| 'widechar' | 'widenative' ] ],              
  7.         [ FIELDTERMINATOR [ = 'field_terminator' ] ],  
  8.         [ FIRSTROW [ = first_row ] ],  
  9.         [ FIRE_TRIGGERS ],  
  10.         [ FORMATFILE = 'format_file_path' ],  
  11.         [ KEEPIDENTITY ],  
  12.         [ KEEPNULLS ],  
  13.         [ KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ],     
  14.         [ LASTROW [ = last_row ] ],  
  15.         [ MAXERRORS [ = max_errors ] ],  
  16.         [ ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ],    
  17.         [ ROWS_PER_BATCH [ = rows_per_batch ] ],  
  18.         [ ROWTERMINATOR [ = 'row_terminator' ] ],            
  19.         [ TABLOCK ],  
  20. )  

参数: 
'database_name' 
是包含指定表或视图的数据库的名称。如果未指定,则系统默认为当前数据库。 

'owner' 
是表或视图所有者的名称。当执行大容量复制操作的用户拥有指定的表或视图时,owner 是可选项。如果没有指定 owner 并且执行大容量复制操作的用户不拥有指定的表或视图,则 Microsoft SQL Server? 将返回错误信息并取消大容量复制操作。 

'table_name' 
是大容量复制数据于其中的表或视图的名称。只能使用那些所有的列引用相同基表所在的视图。有关向视图中复制数据的限制的更多信息,请参见 INSERT。 

'data_file' 
是数据文件的完整路径,该数据文件包含要复制到指定表或视图的数据。BULK INSERT 从磁盘复制数据(包括网络、软盘、硬盘等)。 data_file 必须从运行 SQL Server 的服务器指定有效路径。如果 data_file 是远程文件,则请指定通用命名规则 (UNC) 名称。 

BATCHSIZE [ = batch_size ] 
指定批处理中的行数。每个批处理作为一个事务复制至服务器。SQL Server提交或回滚(在失败时)每个批处理的事务。默认情况下,指定数据文件中的所有数据是一个批处理。 

CHECK_CONSTRAINTS 
指定在大容量复制操作中检查 table_name 的任何约束。默认情况下,将会忽略约束。 

CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] 
指定该数据文件中数据的代码页。仅当数据含有字符值大于 127 或小于 32 的 char、varchar 或 text 列时,CODEPAGE 才是适用的。CODEPAGE 值 描述 ACP char、varchar 或 text 数据类型的列从 ANSI/Microsoft Windows 代码页 ISO 1252 转换为 SQL Server 代码页。 OEM(默认值) char、varchar 或 text 数据类型的列被从系统 OEM 代码页转换为 SQL Server 代码页。 RAW 并不进行从一个代码页到另一个代码页的转换;这是最快的选项。
code_page 特定的代码页号码,例如 850。 

DATAFILETYPE [ = {'char' | 'native' | 'widechar' | 'widenative' } ] 
指定 BULK INSERT 使用指定的默认值执行复制操作。DATAFILETYPE 值 描述 char(默认值) 从含有字符数据的数据文件执行大容量复制操作。 native 使用 native(数据库)数据类型执行大容量复制操作。要装载的数据文件由大容量复制数据创建,该复制是用 bcp 实用工具从 SQL Server 进行的。 widechar 从含有 Unicode 字符的数据文件中执行大容量复制操作。 widenative 执行与 native 相同的大容量复制操作,不同之处是 char、varchar
和 text 列在数据文件中存储为 Unicode。要装载的数据文件由大容量复制数据创建,该复制是用 bcp 实用工具从 SQL Server 进行的。该选项是对 widechar 选项的一个更高性能的替代,并且它用于使用数据文件从一个运行 SQL Server 的计算机向另一个计算机传送数据。当传送含有 ANSI 扩展字符的数据时,使用该选项以便利用 native 模式的性能。 

FIELDTERMINATOR [ = 'field_terminator' ] 
指定用于 char 和 widechar 数据文件的字段终止符。默认的字段终止符是 /t(制表符)。 

FIRSTROW [ = first_row ] 
指定要复制的第一行的行号。默认值是 1,表示在指定数据文件的第一行。 

FIRE_TRIGGERS 
指定目的表中定义的任何插入触发器将在大容量复制操作过程中执行。如果没有指定 FIRE_TRIGGERS,将不执行任何插入触发器。 

FORMATFILE [ = 'format_file_path' ] 
指定一个格式文件的完整路径。格式文件描述了含有存储响应的数据文件,这些存储响应是使用 bcp 实用工具在相同的表或视图中创建的。格式文件应该用于以下情况: 数据文件含有比表或视图更多或更少的列。列使用不同的顺序。列分割符发生变化。数据格式有其它的改变。通常,格式文件通过 bcp 实用工具创建并且根据需要用文本编辑器修改。有关更多信息,请参见 bcp 实用工具。 

KEEPIDENTITY 
指定标识列的值存在于导入文件中。如果没有指定 KEEPIDENTITY,在导入的数据文件中此列的标识值将被忽略,并且 SQL Server 将根据表创建时指定的种子值和增量值自动赋给一个唯一的值。假如数据文件不含该表或视图中的标识列,使用一个格式文件来指定在导入数据时,表或视图中的标识列应被忽略;SQL Server 自动为此列赋予唯一的值。有关详细信息,请参见 DBCC CHECKIDENT。 

KEEPNULLS 
指定在大容量复制操作中空列应保留一个空值,而不是对插入的列赋予默认值。 

KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] 
指定每个批处理中数据的近似千字节数(KB)。默认情况下,KILOBYTES_PER_BATCH 未知。 

LASTROW [ = last_row ] 
指定要复制的最后一行的行号。默认值是 0,表示指定数据文件中的最后一行。 

MAXERRORS [ = max_errors ] 
指定在大容量复制操作取消之前可能产生的错误的最大数目。不能被大容量复制操作导入的每一行将被忽略并且被计为一次错误。如果没有指定 max_errors,默认值为 0。 

ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) 
指定数据文件中的数据如何排序。如果装载的数据根据表中的聚集索引进行排序,则可以提高大容量复制操作的性能。如果数据文件基于不同的顺序排序,或表中没有聚集索引,ORDER 子句将被忽略。给出的列名必须是目的表中有效的列。默认情况下,大容量插入操作假设数据文件未排序。n是表示可以指定多列的占位符。 

ROWS_PER_BATCH [ = rows_per_batch ] 
指定每一批处理数据的行数(即 rows_per_bacth)。当没有指定 BATCHSIZE 时使用,导致整个数据文件作为单个事务发送给服务器。服务器根据 rows_per_batch 优化大容量装载。默认情况下,ROWS_PER_BATCH 未知。 

ROWTERMINATOR [ = 'row_terminator' ] 
指定对于 char 和 widechar 数据文件要使用的行终止符。默认值是 /n(换行符)。 

TABLOCK 
指定对于大容量复制操作期间获取一个表级锁。如果表没有索引并且指定了 TABLOCK,则该表可以同时由多个客户端装载。默认情况下,锁定行为是由表选项 table lock on bulk load 决定的。只在大容量复制操作期间控制锁会减少表上的锁争夺,极大地提高性能。注释BULK INSERT 语句能在用户定义事务中执行。对于一个用 BULK INSERT 语句和 BATCHSIZE 子句将数据装载到使用多个批处理的表或视图中的用户定义事务来说,回滚它将回滚所有发送给 SQL Server 的批处理。权限只有
sysadmin 和 bulkadmin 固定服务器角色成员才能执行 BULK INSERT。 

示例本例从指定的数据文件中导入订单详细信息,该文件使用竖杠 (|) 字符作为字段终止符,使用 |/n 作为行终止符。

Sql代码 

  1. BULK INSERT Northwind.dbo.[Order Details]   FROM 'f:/orders/lineitem.tbl'  
      
  2. WITH (
      
  3.      FIELDTERMINATOR = '|',         
      
  4.      ROWTERMINATOR = '|/n'      
      
  5. )  

[SQL] view
plain
copy

  1. BULK INSERT Northwind.dbo.[Order Details]   FROM 'f:/orders/lineitem.tbl'    
  2. WITH (  
  3.      FIELDTERMINATOR = '|',           
  4.      ROWTERMINATOR = '|/n'        
  5. )  

本例指定 FIRE_TRIGGERS 参数。

Sql代码 

  1. BULK INSERT Northwind.dbo.[Order Details]   FROM 'f:/orders/lineitem.tbl'   
      
  2. WITH ( 
      
  3.      FIELDTERMINATOR = '|',        
      
  4.      ROWTERMINATOR = ':/n',        
      
  5.      FIRE_TRIGGERS         
  6. )   
  7. =============================================================   
  8. BULK INSERT 
      
  9.    [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]    
  10.       FROM 'data_file' 
      
  11.      [ WITH 
      
  12.         (    
  13.    [ [ , ] BATCHSIZE = batch_size ]    --BATCHSIZE指令来设置在单个事务中可以插入到表中的记录的数量   
  14.    [ [ , ] CHECK_CONSTRAINTS ]     --指定在大容量导入操作期间,必须检查所有对目标表或视图的约束。若没有 CHECK_CONSTRAINTS 选项,则所有 CHECK 和 FOREIGN KEY 约束都将被忽略,并且在此操作之后表的约束将标记为不可信。   
  15.    [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]  --指定该数据文件中数据的代码页   
  16.    [ [ , ] DATAFILETYPE =    
  17.       { 'char' | 'native'| 'widechar' | 'widenative' } ]  --指定 BULK INSERT 使用指定的数据文件类型值执行导入操作。   
  18.    [ [ , ] FIELDTERMINATOR = 'field_terminator' ]  --标识分隔内容的符号   
  19.    [ [ , ] FIRSTROW = first_row ]    --指定要加载的第一行的行号。默认值是指定数据文件中的第一行   
  20.    [ [ , ] FIRE_TRIGGERS ]     --是否启动触发器   
  21.    [ [ , ] FORMATFILE = 'format_file_path' ] 
      
  22.    [ [ , ] KEEPIDENTITY ]   --指定导入数据文件中的标识值用于标识列   
  23.    [ [ , ] KEEPNULLS ]    --指定在大容量导入操作期间空列应保留一个空值,而不插入用于列的任何默认值   
  24.    [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]    
  25.    [ [ , ] LASTROW = last_row ]   --指定要加载的最后一行的行号   
  26.    [ [ , ] MAXERRORS = max_errors ]   --指定允许在数据中出现的最多语法错误数,超过该数量后将取消大容量导入操作。   
  27.    [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]  --指定数据文件中的数据如何排序   
  28.    [ [ , ] ROWS_PER_BATCH = rows_per_batch ]    
  29.    [ [ , ] ROWTERMINATOR = 'row_terminator' ]   --标识分隔行的符号   
  30.    [ [ , ] TABLOCK ]     --指定为大容量导入操作持续时间获取一个表级锁   
  31.    [ [ , ] ERRORFILE = 'file_name' ]   --指定用于收集格式有误且不能转换为 OLE DB 行集的行的文件。   
  32.         )]   

[SQL] view
plain
copy

  1. BULK INSERT Northwind.dbo.[Order Details]   FROM 'f:/orders/lineitem.tbl'     
  2. WITH (   
  3.      FIELDTERMINATOR = '|',          
  4.      ROWTERMINATOR = ':/n',          
  5.      FIRE_TRIGGERS        
  6. )  
  7. =============================================================  
  8. BULK INSERT   
  9.    [ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]   
  10.       FROM 'data_file'   
  11.      [ WITH   
  12.         (   
  13.    [ [ , ] BATCHSIZE = batch_size ]    --BATCHSIZE指令来设置在单个事务中可以插入到表中的记录的数量  
  14.    [ [ , ] CHECK_CONSTRAINTS ]     --指定在大容量导入操作期间,必须检查所有对目标表或视图的约束。若没有 CHECK_CONSTRAINTS 选项,则所有 CHECK 和 FOREIGN KEY 约束都将被忽略,并且在此操作之后表的约束将标记为不可信。  
  15.    [ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]  --指定该数据文件中数据的代码页  
  16.    [ [ , ] DATAFILETYPE =   
  17.       { 'char' | 'native'| 'widechar' | 'widenative' } ]  --指定 BULK INSERT 使用指定的数据文件类型值执行导入操作。  
  18.    [ [ , ] FIELDTERMINATOR = 'field_terminator' ]  --标识分隔内容的符号  
  19.    [ [ , ] FIRSTROW = first_row ]    --指定要加载的第一行的行号。默认值是指定数据文件中的第一行  
  20.    [ [ , ] FIRE_TRIGGERS ]     --是否启动触发器  
  21.    [ [ , ] FORMATFILE = 'format_file_path' ]   
  22.    [ [ , ] KEEPIDENTITY ]   --指定导入数据文件中的标识值用于标识列  
  23.    [ [ , ] KEEPNULLS ]    --指定在大容量导入操作期间空列应保留一个空值,而不插入用于列的任何默认值  
  24.    [ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]   
  25.    [ [ , ] LASTROW = last_row ]   --指定要加载的最后一行的行号  
  26.    [ [ , ] MAXERRORS = max_errors ]   --指定允许在数据中出现的最多语法错误数,超过该数量后将取消大容量导入操作。  
  27.    [ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ]  --指定数据文件中的数据如何排序  
  28.    [ [ , ] ROWS_PER_BATCH = rows_per_batch ]   
  29.    [ [ , ] ROWTERMINATOR = 'row_terminator' ]   --标识分隔行的符号  
  30.    [ [ , ] TABLOCK ]     --指定为大容量导入操作持续时间获取一个表级锁  
  31.    [ [ , ] ERRORFILE = 'file_name' ]   --指定用于收集格式有误且不能转换为 OLE DB 行集的行的文件。  
  32.         )]   

下面写个个简单的应用例子

Sql代码 

  1. bulk insert xsxt.dbo.tabletest from 'c:/data.txt'  
  2.  with(
      
  3.    FIELDTERMINATOR=',',
      
  4.    ROWTERMINATOR='/n'  
  5. )  
时间: 2024-09-02 10:03:17

[数据库]Bulk Insert命令详细的相关文章

sql server Bulk Insert命令详细_MsSql

BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中. 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' } WITH ( [ BATCHSIZE [ = batch_size ] ], [ CHECK_CONSTRAINTS ], [ CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ], [ DATAFILE

sql server Bulk Insert命令详细

BULK INSERT以用户指定的格式复制一个数据文件至数据库表或视图中. 语法: BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' FROM 'data_file' } WITH ( [ BATCHSIZE [ = batch_size ] ], [ CHECK_CONSTRAINTS ], [ CODEPAGE [ = 'ACP' | 'OEM' | 'RAW' | 'code_page' ] ], [ DATAFILE

《PowerShell V3——SQL Server 2012数据库自动化运维权威指南》——2.20 使用BULK INSERT实施批量导入

2.20 使用BULK INSERT实施批量导入 本方案描述了如何用PowerShell和BULK INSERT将CSV文件导入SQL Server. 2.20.1 准备 为了做导入测试,我们首先需要创建一个Person表,类似于AdventureWorks2008R2数据库的Person.Person表,简单地修改一下. 我们将在Test架构下创建,并移除一些约束,保持表简单且独立. 为了创建本练习中需要的表,我们打开SSMS,运行如下代码. CREATE SCHEMA [Test] GO C

php-PHP菜鸟求解,insert命令总是无法插入mysql数据库

问题描述 PHP菜鸟求解,insert命令总是无法插入mysql数据库 这是connect.php文件 <?php @mysql_connect("localhost:3306","root","123456") or die("sql连接失败"); @mysql_select_db("yhy") or die("yhy连接失败"); //mysql_query("set

Mysql常用命令 详细整理版_Linux

Mysql常用命令 show databases; 显示数据库 create database name; 创建数据库 use databasename; 选择数据库 drop database name 直接删除数据库,不提醒 show tables; 显示表 describe tablename; 显示具体的表结构 select 中加上distinct去除重复字段 mysqladmin drop databasename 删除数据库前,有提示. 显示当前mysql版本和当前日期 select

SRVCTL 命令详细说明文档(原译)

SRVCTL 命令详细说明文档(译)  简介: SRVCTL是ORACLE9i RAC集群配置管理的工具.本文是对SRVCTL的所有命令进行详细说明的一篇参考文档. 读者对象:ORACLE9i RAC数据库集群管理员. 注: RAC:     Real Application Clusters SRVM:   Server Management ----------------------------------------------------------------------------

让数据库产生一张详细的日历表

日历|数据|数据库 让数据库产生一张详细的日历表 也许有了这张表,你的工作会轻松很多! CREATE TABLE [dbo].[time_dimension] (   [time_id] [int] IDENTITY (1, 1) NOT NULL ,   [the_date] [datetime] NULL ,   [the_day] [nvarchar] (15) NULL ,   [the_month] [nvarchar] (15) NULL ,   [the_year] [smalli

Sql Server中的DBCC命令详细介绍_MsSql

     今天研发中心办年会,晚上就是各自部门聚餐了,我个人喜欢喝干红,在干红中你可以体味到那种酸甜苦辣...人生何尝不是这样呢???正好ceo从美国带了干红回来,然后我就顺道开心的过了把瘾....一个字...爽....喝着有点多...到现在头还疼....回来地铁上想这个周末忙着找房子,书一点都没看,也没在博客上接着忽悠,想起了上篇博客有个哥们说普及普及DBCC,虽然有点迷迷糊糊的...看能不能写出点新花样....不管学什么语言,还是数据库,你得看的比人家深一层...最可悲的就是停留的在表层,这

Openstack 使用migrate进行数据库升级实现方案详细介绍_OpenStack

Openstack 使用migrate进行数据库升级实现方案详细介绍 OpenStack中随着版本的切换,新版本加入一些数据库表或者增加字段等是必然的事情,如何比较容易的进行这些数据库升级的适配和管理,这里就要用到oslo_db中的migrate了,这里以为M版本的heat为例,讲解一下migrate管理db的原理. 我们使用migrate需要用到的主要包含以下两部分:1.versions里面的为版本号+数据库适配脚本:2.migrate.cfg为migrate需要用到的配置文件,两部分的命名是