sqlserver中数据导入导出,有很多方法,可以用sqlserver自带的导入导出工具,也可以建立带数据脚本,还可以用sql语句,甚至可以直接手动粘贴拷贝。但是这些方法中,使用BCP工具无疑是最方便、最快捷的方法。
首先让我们了解一下什么是BCP。BCP——批量复制工具程序(Bulk Copy Program)——是SYBASE公司提供专门用于数据库表一级数据备份的工具。在SQL Server中,BCP是一个负责导入导出数据的命令行工具,能以并行的方式高效地导入导出大批量的数据。BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出。在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中。
BCP的完整语法是:
bcp {dbtable | query} {in | out | queryout | format} 数据文件
[-m 最大错误数] [-f 格式化文件] [-e 错误文件]
[-F 首行] [-L 末行] [-b 批大小]
[-n 本机类型] [-c 字符类型] [-w 宽字符类型]
[-N 将非文本保持为本机类型] [-V 文件格式版本] [-q 带引号的标识符]
[-C 代码页说明符] [-t 字段终止符] [-r 行终止符]
[-i 输入文件] [-o 输出文件] [-a 数据包大小]
[-S 服务器名称] [-U 用户名] [-P 密码]
[-T 可信连接] [-v 版本] [-R 允许使用区域设置]
[-k 保留空值] [-E 保留标识值]
[-h"加载提示"]
[-x 生成xml 格式化文件]
其中挑几个常用的选项进行讲解
例:BCP 表名 out c:\data.txt -S服务器名称 -c -U“sa” -P“password”
其中“out”表示输出,“-c”表示字符,“-U-P”表示用户名和密码,需要引号括起,权限允许的情况下可以用“-T”代替。
与“out”类似,“queryout”同样是输出指令,不同之处是queryout导出的是通过SELECT FROM语句对表或视图进行过滤。
例:BCP select * from表名queryout c:\data.txt -S服务器名称 -c -U“sa” -P“password”
in是向数据库导入,可以理解为out的逆过程。in与format这里不在举例。
最后,如何调用BCP工具呢。作为控制台工具,当然在cmd直接调用、或是写成bat批处理文件调用最为方便,但仅仅如此还是不能满足大家的需求。下面说明在sql server2008中及.net两个平台调用的情况。
利用sql server的系统存储过程xp_cmdshelll。运行前要开启xp_cmdshelll:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC
sp_configure 'xp_cmdshell', 1;RECONFIGURE;
运行结束后别忘关闭xp_cmdshell:
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC
sp_configure 'xp_cmdshell', 0;RECONFIGURE;
而在.net中,同样可以调用BCP。使用System.Data.SqlClient.SqlBulkCopy这个类,可以轻松的完成对BCP的操作。相比于通过调用cmd对象直接使用BCP工具,使用SqlBulkCopy类更加安全、不易出错。
当然,无论哪种方法,最终调用的都是BCP.exe这个执行文件。