`
hdxiong
  • 浏览: 378292 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Bulk Insert命令详细

阅读更多
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' ] ],
        [ DATAFILETYPE [ = 'char' | 'native'| 'widechar' | 'widenative' ] ],            
        [ FIELDTERMINATOR [ = 'field_terminator' ] ],
        [ FIRSTROW [ = first_row ] ],
        [ FIRE_TRIGGERS ],
        [ FORMATFILE = 'format_file_path' ],
        [ KEEPIDENTITY ],
        [ KEEPNULLS ],
        [ KILOBYTES_PER_BATCH [ = kilobytes_per_batch ] ],   
        [ LASTROW [ = last_row ] ],
        [ MAXERRORS [ = max_errors ] ],
        [ ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ],  
        [ ROWS_PER_BATCH [ = rows_per_batch ] ],
        [ ROWTERMINATOR [ = 'row_terminator' ] ],          
        [ TABLOCK ],
)


参数:
'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 作为行终止符。
BULK INSERT Northwind.dbo.[Order Details]   FROM 'f:\orders\lineitem.tbl'  
WITH (
     FIELDTERMINATOR = '|',         
     ROWTERMINATOR = '|\n'      
)

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

下面写个个简单的应用例子
bulk insert xsxt.dbo.tabletest from 'c:\data.txt'
 with(
   FIELDTERMINATOR=',',
   ROWTERMINATOR='\n'
)
分享到:
评论

相关推荐

    sql server Bulk Insert命令详细

    下面将详细介绍Bulk Insert命令的各种参数和使用方式。 首先,`BULK INSERT`的基本语法如下: ```sql BULK INSERT [ [ 'database_name'.][ 'owner' ].]{ 'table_name' } FROM 'data_file' WITH ( [ BATCHSIZE [ ...

    bulk insert 文本文件数据导入

    在SQL Server中,`BULK INSERT`命令是一个非常实用的功能,用于从外部数据源,如文本文件或CSV文件,快速大量地导入数据到数据库表中。这个操作比使用INSERT语句逐行插入数据快得多,尤其在处理大量数据时。在本篇中...

    sql.rar_Bulk Insert

    通过对比不同导入方法(如T-SQL INSERT语句、BULK INSERT、BCP命令等)的运行时间,我们可以评估Bulk Insert在提升数据库速度方面的作用。 总的来说,Bulk Insert是SQL Server中一种强大的工具,特别适用于大数据量...

    bulk insert导入数据

    ### Bulk Insert导入数据知识点 #### 一、Bulk Insert概述 - **定义**:`BULK INSERT` 是 SQL Server 提供的一种高效数据导入工具,能够帮助用户快速地将大量数据从文本文件导入到数据库表中。 - **优势**: - **...

    gorm-bulk-insert:使用gorm实现BulkInsert

    BulkInsert ( db , bulkData ) // or bulk . BulkInsertWithTableName ( db , tableName , bulkData ) 批量上传 bulk . BulkUpsert ( db , bulkData , uniqueKeys ) // or bulk . BulkUpsertWithTableName

    gorm-b​​ulk-insert:使用gorm实现BulkInsert,只需传递一个Slice的结构即可。 简单兼容

    Gorm批量插入 Gorm Bulk Insert是一个使用实现批量插入的库。 只需传递一片结构即可执行批量插入,就像您定期使用gorm一样。 目的 当在数据库中保存大量... BulkInsert ( db , sliceValue , 3000 , "Name" , "Email

    使用BULK INSERT大批量导入数据 SQLSERVER

    本文将详细介绍如何使用`BULK INSERT`命令来大批量导入数据到SQL Server,并通过实例来加深理解。 #### BULK INSERT 命令简介 `BULK INSERT`是SQL Server提供的一种快速导入大量数据的方法,尤其适用于数据量较大...

    mysql.rar_linux bulk insert

    本教程将详细介绍如何实现这个过程,并利用提供的`insert.py`、`create_table.sh`和`insert_url.sh`三个文件来辅助讲解。 首先,我们需要创建一个表来存储数据。`create_table.sh`脚本很可能是用来创建数据库表结构...

    Excel2017工作表中如何导入.txt文件.docx

    本文将详细介绍如何使用Excel 2017导入文本文件,并结合SQL Server 2000的BULK INSERT命令进行进一步的数据导入。 首先,Excel 2017提供了“文本导入向导”功能,它可以帮助用户轻松地将`.txt`或`.csv`等文本文件...

    mssql server 存储过程里,bulk insert table from '路径+文件',路径固定,文件名不固定的实现方法

    在SQL Server中,`BULK INSERT` 是一个非常实用的命令,用于快速地从外部数据文件导入大量数据到数据库表中。然而,在某些情况下,我们可能需要动态地处理文件名,尤其是在存储过程中,当文件名不是固定的。这个问题...

    把CSV文件导入到SQL Server表中的方法

    有时候我们可能会把CSV中的数据导入...我们使用的是SQL Server的BULK INSERT命令,关于该命令的详细解释,请点击此处; 我们先在SQL Server中建立用于保存该信息的一张数据表, CREATE TABLE CSVTable( Name NVARCHA

    SQL批量录入数据到数据库中

    然而,要批量录入数据,我们可以使用多行INSERT语句或者BULK INSERT命令。多行INSERT语句允许我们在一个语句中插入多行数据,例如: ```sql INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1_1, 值1_2, ...), ...

    sql导入导出命令大全

    6. **BULK INSERT命令**: `BULK INSERT`语句可以直接从文本文件批量导入数据,定义字段和行终止符: ```sql BULK INSERT 库名..表名 FROM 'c:\test.txt' WITH (FIELDTERMINATOR = ';', ROWTERMINATOR = '\n') ...

    文本导入sql

    内容将涵盖标题及描述中提到的关键知识点:`BULK INSERT`命令的使用、参数详解以及实际应用示例。 ### 一、BULK INSERT 命令概述 `BULK INSERT`是SQL Server提供的一种高效数据导入工具,它能够将外部文件中的数据...

    导入CSV到SQL SERVER 问题

    SQL Server提供了多种方法来导入CSV数据,包括SQL Server Management Studio (SSMS) 的“导入和导出数据”工具,T-SQL语句,以及BULK INSERT命令。 1. 使用SSMS的“导入和导出数据”工具:这是最直观的方法,适用于...

    向数据库中插入txt的数据

    标题中提到的代码示例使用了T-SQL(Transact-SQL)语言中的`BULK INSERT`命令,这是SQL Server中一种高效批量加载数据的方法。该命令允许从一个或多个数据文件中快速导入大量数据到数据库表中,尤其适用于大数据量的...

    文本文件批量导入sql数据库

    3. **使用BULK INSERT命令(SQL Server)**:在SQL Server中,可以使用BULK INSERT语句来批量导入数据。例如: ```sql BULK INSERT TableName FROM 'C:\path\to\file.csv' WITH (FIELDTERMINATOR = ',', ...

Global site tag (gtag.js) - Google Analytics