sqlserverBulkInsert命令详细
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_TRIGGER
S,将不执⾏任何插⼊触发器。
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'
insert语句字段顺序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:/'
with(
FIELDTERMINATOR=',',
ROWTERMINATOR='/n'
)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论