批量处理BCP导入文件到数据库

今天接到个任务,csv文件导入到数据库中。

心想小case,结果一看惊呆了,有上万个数据文件,每个文件中有几万条数据。

效率问题是要考虑的首要因素。

因为之前做过BCP导入,脑海中立马有了思路:循环所有文件,执行BCP命令就可以了吧,决定把它做成个bat批处理。

过程当中遇到的几个问题,mark下:

1. CSV文件中的内容格式(是用,分割还是空格分隔),否则执行BCP导入时候会提示相应的错误

2. 蛋疼的bat语法


场景:

1. 上万个数据文件

2. 导入Sqlserver

3. 同时记录log文件


实现代码:

批量导入数据文件的批处理代码如下:(保存为input.bat)

@echo off
setlocal enabledelayedexpansion		rem 设定变量延迟的效果,为了下面的计数 !sum!
set DestPath=D:\tools\Bcp\csv
set DestExt=*.csv 			rem 模糊检索.csv文件
set /a sum=0
for /f "delims=" %%i  in ('dir /b/a-d/s %DestPath%\%DestExt%')  	rem 循环指定文件夹下的文件,注意dir 后面的参数
do (
echo,					rem 输出空行(效率高)
set /a sum+=1
echo ------------------------------------!sum!------------------------------------
echo %%i
bcp Mydb.dbo.TB_Test in %%i -t "\," -c -S 172.168.1.2 -U sa -P 123456	rem BCP导入数据文件到数据库,一定要主要格式-t -c,符合你的文本格式,否则导入报错
)

pause


把执行的log记录下来,可以另外新建个bat文件,调用上面创建的bat,如下实现:

call input.bat => aa.log
echo "Complete!!!"
pause

结果:

2万多个数据文件,导入了总共2.7亿数据,用时1个小时左右,还是蛮快的


猜你喜欢

转载自blog.csdn.net/summonyyq/article/details/53406062