使用BCP 命令输入大量的数据

 由于前段时间做大数据量的导入程序.在做的时候遇到的问题.几万条的数据从Excel中导入到数据库中,速度是非常的慢,程序简直不能运行,后来就研究了BCP命令的方式进行导入.几十万的数据也就几十秒,很快,所以将自己的小成果给大家分享.当然,可能有很多可以完善的地方,大家共同努力吧
 

使用BCP 命令输入大量的数据

 

1:目的:将大两数据输入sql server 等数据库

2:方法:BCP命令

3:实现方式:

 Sql 语句:

bulk   insert T1 from 'C:"TxtFile2.txt'

WITH

(   FIELDTERMINATOR=',',

    ROWS_PER_BATCH=100,

    errorfile='c:"aa.csv',

    formatfile='C:"sql.fmt'

)

From 后面的源文件可以是txt 也可以是csv格式,两种格式的FIELDTERMINATOR一样都是’,’.

此外对于一张表,我可以只导入某些字段.这是我们必须用formatfile格式文件进行映射.文件的格式为”fmt”格式语法如下

<?xml version="1.0"?>

<BCPFORMAT

xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

 <RECORD>

 <FIELD ID="1" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="50" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>

    <FIELD ID="2" xsi:type="CharTerm" TERMINATOR="," MAX_LENGTH="200" COLLATION="SQL_Latin1_General_CP1_CI_AS"/>

    <FIELD ID="3" xsi:type="CharTerm" TERMINATOR=""r"n" MAX_LENGTH="50" />

 </RECORD>

 <ROW>

 <COLUMN SOURCE="1" NAME="id" xsi:type="SQLVARYCHAR"/>     

    <COLUMN SOURCE="2" NAME="firstname" xsi:type="SQLVARYCHAR"/>

    <COLUMN SOURCE="3" NAME="age" xsi:type="SQLINT"/>

 </ROW>

</BCPFORMAT>

注意TERMINATOR的设置.”,” 还是”"t”.txtcsv文件为”,”

Excel格式文件为”"t”.

目前已经通过了对txtcsv格式的导入,对于xls文件的导入,还在进一步的研究中

0
0
(请您对文章做出评价)
« 上一篇: 办公室30句经典赞美句子
» 下一篇: 正则表达式(regular expression)转
posted @ 2008-03-07 16:29 陋室 阅读(2509) 评论(20)  编辑 收藏 网摘 所属分类: SQL, NET

  回复  引用    
#1楼2008-03-07 17:17 | 匿名[未注册用户]
黑色+蓝色,太刺眼拉
  回复  引用  查看    
#2楼2008-03-07 18:20 | cslar      
哈啊

  回复  引用  查看    
#3楼2008-03-07 20:12 | Silent Void      
SQL Server 2005默认没有开bcp~
CSV用逗号分隔,比较好解析,SQL Server已经帮我们干了,如果允许用的话,可以直接拿来,但如果出于其他原因不给用的,自己解析也不难。
XLS的话,二进制的,可以考虑ADO.Net、DCom等,但都觉得不咋的....

  回复  引用  查看    
#4楼2008-03-08 00:16 | stu_acer      
如果在SQL Server 2005或以上版本
处理数据的导入建议采用SSIS,专业的ETL工具
可视化编辑,处理数据的逻辑也清晰,可管理性也还是不错的

  回复  引用    
#5楼2008-03-08 15:32 | mqcan[未注册用户]
呵呵。bcp方法还在研究阶段,大家如果有更好的方法,不妨分享一下
  回复  引用  查看    
#7楼2008-03-09 20:51 | 静◆思◆学 ★ network      
.net 2.0下新增了一个SqlBulkCopy批量复制数据类,可以试试
  回复  引用    
#8楼2008-03-10 12:06 | mqcan[未注册用户]
thanks for providing the solution , network
  回复  引用  查看    
#9楼2008-03-11 14:24 | yanchao      
有意思 学习一下
  回复  引用  查看    
#10楼2008-04-11 09:46 | 留恋星空      
UP
  回复  引用  查看    
#11楼2008-04-11 09:55 | 留恋星空      
如果是SQL2000了,有什么好的提议?

  回复  引用    
#12楼2008-04-11 10:00 | Q[未注册用户]
TO 留恋星空
sql 2000同样支持BCP 命令, 楼主可以看下 下面的内容

SQL2000中BCP轻松使用导入导出数据
bcp 可以实现数据的导入与导出。

c:\>bcp "demo.dbo.订单表" out "c:\test.txt" -c -q -S "virus\mysql" -U "sa"
-P "dir"

注释:demo.dbo.订单表 把demo里面表订单表导出
out 导出
in 导入
-c 和-q 指定导出时按规则排序
-S "virus\mysql" 指定Server名称为virus实例名为mysql
-U “sa” 指定用户SA
-P “dir” 密码是dir


导入则用:in 前提是数据库中的表的结构是存在,但是表里是没有重复的数据内容的

  回复  引用    
#13楼2008-05-17 19:19 | 佑我中华[未注册用户]
请教:
1. 导出数据时,因为是要有选择导出列,所以使用了select obj1,obj2 from mytable;
2. 导入数据时,如何保障向目标数据表写数据时候,只写入指定的列?


  回复  引用  查看    
#14楼[楼主]2008-05-17 19:43 | 小Q      
--引用--------------------------------------------------

--------------------------------------------------------

to佑我中华
请仔细阅读文章,文章中的formatfile 文件中可以定义列!

  回复  引用    
#15楼2008-09-08 17:42 | 上的fa[未注册用户]
http://www.aarealjx.com.cn振动电机|振动筛|超声波振动筛
  回复  引用    
#16楼2009-02-16 09:23 | fdsa[未注册用户]
自动抹灰机www.mohuiji.org http://mohuiji.w21.goodnic.net
活动房www.xxhdfc.com

  回复  引用    
#17楼2009-04-06 23:37 | 沼气池[未注册用户]
沼气池,玻璃钢化粪池
  回复  引用    
#18楼2009-05-26 15:41 | 振动筛[未注册用户]
振动电机http://www.aarealjx.com.cn/product/zddj" target="_new" rel="nofollow">http://www.aarealjx.com.cn/product/zddj
超声波振动筛http://www.aarealjx.com.cn/product/csbzd" target="_new" rel="nofollow">http://www.aarealjx.com.cn/product/csbzd
振动筛http://www.aarealjx.com.cn
振动筛网http://www.zhendongshai8.cn http://www.zhendongshai8.com

  回复  引用    
#19楼2009-07-05 13:54 | zyx529[未注册用户]
<a href="http://www.zjghaina.cn/">超声波清洗机</a>
<a href="http://www.zjgshuanghe.cn/">超声波清洗机</a>
<a href="http://www.51zhjx.cn/">离心机</a>

  回复  引用    
#20楼2009-07-05 13:55 | zyx529[未注册用户]
<a href="http://www.zjghaina.cn/">超声波清洗机</a>
<a href="http://www.zjgshuanghe.cn/">超声波清洗机</a>
<a href="http://www.51zhjx.cn/">离心机</a><a href="http://www.zjghaina.cn/">超声波清洗机</a>
<a href="http://www.zjgshuanghe.cn/">超声波清洗机</a>
<a href="http://www.51zhjx.cn/">离心机</a><a href="http://www.zjghaina.cn/">超声波清洗机</a>
<a href="http://www.zjgshuanghe.cn/">超声波清洗机</a>
<a href="http://www.51zhjx.cn/">离心机</a>