今天接到个任务,csv文件导入到数据库中。
心想小case,结果一看惊呆了,有上万个数据文件,每个文件中有几万条数据。
效率问题是要考虑的首要因素。
因为之前做过BCP导入,脑海中立马有了思路:循环所有文件,执行BCP命令就可以了吧,决定把它做成个bat批处理。
过程当中遇到的几个问题,mark下:
1. CSV文件中的内容格式(是用,分割还是空格分隔),否则执行BCP导入时候会提示相应的错误
2. 蛋疼的bat语法
场景:
1. 上万个数据文件
2. 导入Sqlserver
3. 同时记录log文件
扫描二维码关注公众号,回复:
3076301 查看本文章
实现代码:
批量导入数据文件的批处理代码如下:(保存为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个小时左右,还是蛮快的