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