ITPub博客

首页 > 数据库 > SQL Server > sqlserver快速导入导出工具

sqlserver快速导入导出工具

原创 SQL Server 作者:regonly1 时间:2014-02-28 10:58:27 0 删除 编辑

由于客户将sqlserver作为生产数据库,所以最近半年时间一直在此下面做开发和学习。之前找开发工具也找了很长时间,最后总算找到一个比较喜欢的toad for mssql。
有次,需要将sqlserver的数据移植到oracle版本下,用oracle下的程序进行数据验证。但是发现,toad for mssql的文本导出实在太慢,600w的数据居然花了40多分钟还没导完,这样的速度是无法容忍的。
经过大量的资料和查询后,最后发现bcp这个工具。该工具导出非常快速,同样600w+的数据,只花了5分钟左右的时间,全部导出,而且符合格式要求。
参考命令如下:
bcp [table_name] out [file_name] -t "\t" -c -S [server_name] -U [username] -P [password]
含义如下:
[table_name]:表示要导出的表;
out:表示导出(in则表示导入);
-t:表示以什么作为字段的分隔符。默认为制表符(即\t);
-c:表示以文本方式导出;
-S:主机名;
-U:sqlserver用户名;
-P:密码;

更多信息:
用法: 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 保留 Null 值] [-E 保留标识值]
[-h"加载提示"] [-x 生成 xml 格式化文件]
[-d 数据库名称] [-K 应用程序意向]

该工具同样适合于导入,参数可以参考以上内容。但是,需要注意的是,bcp的导入对日期类型会有问题。导入报错类似如下:


开始复制...
SQLState = 22005, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]对于造型说明无效的字符值
SQLState = 22005, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]对于造型说明无效的字符值
SQLState = 22005, NativeError = 0
Error = [Microsoft][SQL Server Native Client 11.0]对于造型说明无效的字符值

BCP 复制 in 失败
出现该问题的原因是bcp在处理日期类型的时候,无法识别类似12-1-2014和1-12-2014这样的日期数据。似乎是bcp的一个bug,暂时也没有找到有效的修复补丁。
可以尝试在sql环境下用如下方式解决:
bulk insert table_name
from 'filename'--如:c:\filename.csv
with
( FIELDTERMINATOR ='\t', -- 分隔符
--ROWTERMINATOR ='\n',
KILOBYTES_PER_BATCH=5000,
firstrow=1
)
该方式导入的速度极快,130w左右的数据,10s左右即可导入。非常方便。

有关bulk insert的更多内容可参考官方文档:
http://msdn.microsoft.com/en-us/library/ms188365.aspx

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/12932950/viewspace-1096912/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-05-10

  • 博文量
    257
  • 访问量
    1070052