分两步处理,第一步是将csv导入到mysql。没有使用mssql自带客户端的导入功能,因为这个功能太坑,尝试N多种方法仍然是报错,因此选择先转换成mysql做中间步骤。
csv/text导入MySQL
一批很大的csv数据(其实并非csv,而是制表符分隔字段),要导入到mssql数据库里。
首先在cygwin下使用awk对数据做预处理,只筛选出字符数正确的行。并且在首行加入列名,以便导入工具自动做列对应。
然后计算各字段最大长度;因为字段数太多(63个),所以计算一下,用于构造create table语句。对于最大长度在255以下的字段使用varchar(n)型,255以上使用longtext类型。
#参考下面语句 $ awk -F "\t" 'NF==63 {print $0}' all.csv >all_63f.txt $ head -1 origin_text_file.txt >h.txt $ dos2unix h.txt #注意最好不要带BOM,否则自行另存一下,避免麻烦 $ cat h.txt all_63f.txt >a63_with_head.txt #最大计算字符长度,本身并不复杂,只是写在一行里,阅读不太方便 $ awk -F "\t" 'BEGIN{for(i=1;i<=63;i++){xcount[i]=0}} {for(i=1;i<=63;i++){if(xcount[i]<length($i) ){xcount[i]=length($i)}}} END{for(i=1;i<=63;i++){print i,xcount[i]}}' all_63f.txt
接下来使用Navicat for MySQL将导入csv。navcate可以试用,功能足够用;如果使用频繁,建议购买授权。
MySQL导入mssql
以下win2008 x64下的mssql 2012为例。
安装mysql的.net驱动 http://dev.mysql.com/downloads/connector/
create table,建表,与mysql结构一致。
使用mssql自带导入功能导入数据,导入数据源选择 .Net Framework Data Provider for MySQL,填写必要的主机名、登录名、口令,如下
不能选择源数据表,必须写select 语句,如: select f1,f2,f3… from `db`.`table` where 1
后面应该没有什么难度了。