5.3 BULK INSERT
在本章开始处说过一个类似的大容量操作命令,这就是BULK INSERT命令。要使用该命令,必须是sysadmin的成员,或者是bulkadminserver角色的成员。
本质上,BULK INSERT操作类似于可以直接在T-SQL中使用的有限版本的BCP。其语法如下:
BULK INSERT [['<数据库名>'.]['<模式名>'].]'<表名>' FROM '<数据文件>'
[WITH
(
[BATCHSIZE [ = <批处理行数>]]
[, CHECK_CONSTRAINTS]
[, CODEPAGE [={'ACP'|'OEM'|'RAW'|'<代码页>'}]]
[, DATAFILETYPE [={'char'|'native'|'widechar'|'widenative'}]]
[, FIELDTERMINATOR [= '<字段终止符>' ]]
[, FIRSTROW [= <第一行行号>]]
[, FIRE_TRIGGERS]
[, FORMATFILE = '<格式化文件路径>' ]
[, KEEPIDENTITY]
[, KEEPNULLS]
[, KILOBYTES_PER_BATCH [= <近似千字节数>]]
[, LASTROW [ = <最后一行行号>]]
[, MAXERRORS [ = <最多错误数>]]
[, ORDER ({column [ASC|DESC]} [ ,...n ] )]
[, ROWS_PER_BATCH [= <近似数据行数>]]
[, ROWTERMINATOR [ = '<行终止符>']]
[, TABLOCK]
[, ERRORFILE = '<文件名>']
)
]
现在,如果你有一种似曾相识的感觉,那么你无疑是掌握了知识要点——几乎所有这些开关,都在本章开始处讲述的基本BCP导入语法中有类似的等价物。
BULK INSERT特殊的权限要求是有些麻烦(不是所有的人都属于sysadmin或bulkinsert),但是,BULK INSERT的确带来了几个显著的优点:
l 它能作为使用BEGIN TRAN和相关语句的用户定义事务的一部分执行;
l 对SQL Server来说,它运行在进程内,由于避免了编组,因而获得了一些性能上的提高;
l 与BCP使用的命令行语法相比,它没有那么费解(略少一些)。
关于BULK INSERT最大的问题是——它是大容量插入。BULK INSERT将不会帮助你创建格式化文件。它不会为你导出数据。它只是获得BCP功能的一种简单可行的方法,以便在SQL Server中把数据载入数据库。