sql server Bulk Insert命令详细
BULKINSERT以用户指定的格式复制一个数据文件至数据库表或视图中。
语法:
BULKINSERT[['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®SQLServer?将返回错误信息并取消大容量复制操作。
'table_name'
是大容量复制数据于其中的表或视图的名称。只能使用那些所有的列引用相同基表所在的视图。有关向视图中复制数据的限制的更多信息,请参见INSERT。
'data_file'
是数据文件的完整路径,该数据文件包含要复制到指定表或视图的数据。BULKINSERT从磁盘复制数据(包括网络、软盘、硬盘等)。data_file必须从运行SQLServer的服务器指定有效路径。如果data_file是远程文件,则请指定通用命名规则(UNC)名称。
BATCHSIZE[=batch_size]
指定批处理中的行数。每个批处理作为一个事务复制至服务器。SQLServer提交或回滚(在失败时)每个批处理的事务。默认情况下,指定数据文件中的所有数据是一个批处理。
CHECK_CONSTRAINTS
指定在大容量复制操作中检查table_name的任何约束。默认情况下,将会忽略约束。
CODEPAGE[='ACP'|'OEM'|'RAW'|'code_page']
指定该数据文件中数据的代码页。仅当数据含有字符值大于127或小于32的char、varchar或text列时,CODEPAGE才是适用的。CODEPAGE值描述ACPchar、varchar或text数据类型的列从ANSI/MicrosoftWindows®代码页ISO1252转换为SQLServer代码页。OEM(默认值)char、varchar或text数据类型的列被从系统OEM代码页转换为SQLServer代码页。RAW并不进行从一个代码页到另一个代码页的转换;这是最快的选项。code_page特定的代码页号码,例如850。
DATAFILETYPE[={'char'|'native'|'widechar'|'widenative'}]
指定BULKINSERT使用指定的默认值执行复制操作。DATAFILETYPE值描述char(默认值)从含有字符数据的数据文件执行大容量复制操作。native使用native(数据库)数据类型执行大容量复制操作。要装载的数据文件由大容量复制数据创建,该复制是用bcp实用工具从SQLServer进行的。widechar从含有Unicode字符的数据文件中执行大容量复制操作。widenative执行与native相同的大容量复制操作,不同之处是char、varchar和text列在数据文件中存储为Unicode。要装载的数据文件由大容量复制数据创建,该复制是用bcp实用工具从SQLServer进行的。该选项是对widechar选项的一个更高性能的替代,并且它用于使用数据文件从一个运行SQLServer的计算机向另一个计算机传送数据。当传送含有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,在导入的数据文件中此列的标识值将被忽略,并且SQLServer将根据表创建时指定的种子值和增量值自动赋给一个唯一的值。假如数据文件不含该表或视图中的标识列,使用一个格式文件来指定在导入数据时,表或视图中的标识列应被忽略;SQLServer自动为此列赋予唯一的值。有关详细信息,请参见DBCCCHECKIDENT。
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,则该表可以同时由多个客户端装载。默认情况下,锁定行为是由表选项tablelockonbulkload决定的。只在大容量复制操作期间控制锁会减少表上的锁争夺,极大地提高性能。注释BULKINSERT语句能在用户定义事务中执行。对于一个用BULKINSERT语句和BATCHSIZE子句将数据装载到使用多个批处理的表或视图中的用户定义事务来说,回滚它将回滚所有发送给SQLServer的批处理。权限只有sysadmin和bulkadmin固定服务器角色成员才能执行BULKINSERT。
示例本例从指定的数据文件中导入订单详细信息,该文件使用竖杠(|)字符作为字段终止符,使用|/n作为行终止符。
BULKINSERTNorthwind.dbo.[OrderDetails]FROM'f:/orders/lineitem.tbl' WITH( FIELDTERMINATOR='|', ROWTERMINATOR='|/n' )
本例指定FIRE_TRIGGERS参数。
BULKINSERTNorthwind.dbo.[OrderDetails]FROM'f:/orders/lineitem.tbl' WITH( FIELDTERMINATOR='|', ROWTERMINATOR=':/n', FIRE_TRIGGERS ) ============================================================= BULKINSERT [database_name.[schema_name].|schema_name.][table_name|view_name] FROM'data_file' [WITH ( [[,]BATCHSIZE=batch_size]--BATCHSIZE指令来设置在单个事务中可以插入到表中的记录的数量 [[,]CHECK_CONSTRAINTS]--指定在大容量导入操作期间,必须检查所有对目标表或视图的约束。若没有CHECK_CONSTRAINTS选项,则所有CHECK和FOREIGNKEY约束都将被忽略,并且在此操作之后表的约束将标记为不可信。 [[,]CODEPAGE={'ACP'|'OEM'|'RAW'|'code_page'}]--指定该数据文件中数据的代码页 [[,]DATAFILETYPE= {'char'|'native'|'widechar'|'widenative'}]--指定BULKINSERT使用指定的数据文件类型值执行导入操作。 [[,]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']--指定用于收集格式有误且不能转换为OLEDB行集的行的文件。 )]
下面写个个简单的应用例子
bulkinsertxsxt.dbo.tabletestfrom'c:/data.txt' with( FIELDTERMINATOR=',', ROWTERMINATOR='/n' )