分兩步處理,第一步是將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
後面應該沒有什麼難度了