一、什么是BCP
BCP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据。BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出。在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中。
BCP是SQL Server 2000和SQL Server 2005工具中的一部分,BCP在SQL Server 2000和在SQL Server 2005中的版本不一样,实现的方法也不一样。在SQL Server 2000中,它是通过ODBCBCP.DLL这个文件来实现的。但是在SQL Server 2005中,它是通过SNAC来实现的。
二、BCP的主要功能
(1) 导入。
这个动作使用in命令完成,后面跟需要导入的文件名。
(2) 导出。
这个动作使用out命令完成,后面跟需要导出的文件名。
(3) 使用SQL语句导出。
这个动作使用queryout命令完成,它跟out类似,只是数据源不是表或视图名,而是SQL语句。
(4) 导出格式文件。
这个动作使用format命令完成,后而跟格式文件名。
三、BCP的主要参数(SQL Server 2005)
在CMD中敲入bcp.exe /? 就会看到如下的命令行参数:
接下来详细讲解每个参数的具体含义。
· -m max_errors: 规定最大允许的可以操作出错的个数。缺省是10,也就是说,如果在bcp操作中,碰到一个错,如果还在允许出错个数范围内,它还会继续进行bcp操作。
· -f format_file: 给出格式文件.format_file表示格式文件名。这个选项依赖于上述的动作,如果使用的是in或out,format_file表示已经存在的格式文件,如果使用的是format则表示是要生成的格式文件。
· -e err_file: 保存错误文件
· -F: first_row: 指定从被导出表的哪一行导出,或从被导入文件的哪一行导入。
· -L: last_row: 指定被导出表要导到哪一行结束,或从被导入文件导数据时,导到哪一行结束。
· -b batch_size: 一个batch里面包括的行数,缺省值为1.也就是说一次搞定。
· -n: 使用native (database) 数据类型。
· -c:使用char类型做为存储类型,没有前缀且以"\t"做为字段分割符,以"\n"做为行分割符。
· -w: 把所有的数据当作unicode类型。和-c类似,只是当使用Unicode字符集拷贝数据时使用,且以nchar做为存储类型。
· -N: 使用native(database)数据类型for nocharacter数据,对于character数据,则用unicode型
· -V: 告诉bcp我要用更早版本的数据库
· -q: 执行以下SET QUOTED_IDENTIFIER ON.
· -C codepage 使用collation
· -t field_term 就是指明一个column的结束符号,指定字符分割符,默认是"\t"。
· -r row_term 就是指明一个row的结束符号,指定行分割符,默认是"\n"。
· -i input_file: 也就是response文件,这样下次操作的时候,就不用问同样问题了。
· -o output_file: 也就是用来重定向的。
· -a packet_size: 指明一个网络包的有多少个bytes
· -S serverName\instance_name :指定要连接的SQL Server服务器的实例,如果未指定此选项,BCP连接本机的SQL Server默认实例。如果要连接某台机器上的默认实例,只需要指定机器名即可。
· -U:指定连接SQL Sever的用户名。
· -P:指定连接SQL Server的用户名密码。
· -T: 使用信任连接,指定BCP使用信任连接登录SQL Server。如果未指定-T,必须指定-U和-P。
· -v: 注意是小写的,打印出bcp的版本号码
· -R: 制定reginoal 设置
· -k: 指定空列使用null值插入,而不是这列的默认值。
· -E: 说明我们关注identity, 不会由数据库自动生成column 值。
· -h: “hint” 提示: 告诉bcp数据已经是sort好了。(能够提高性能)
· -x: 这个选项要和-f format_file配合使用,以便生成xml格式的格式文件。