今天接到个任务,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个小时左右,还是蛮快的