Maxmind-http://www.maxmind.com/app/geolitecountryからGeoLiteCountry
CSVファイルをダウンロードしました。私に与えられたフォーマットを標準として(これが自動化されたタスクになるように)私はすべてのデータをテーブルにインポートしようとしています。Maxmind CSVをSQL Serverにインポートする
私は正確に提供された列に一致する列を持つ新しいテーブルIPCountries2
作成:私は見つけることができるコードの様々なチャンクを使用して
FromIP varchar(50),
ToIP varchar(50),
BeginNum bigint,
EndNum bigint,
CountryCode varchar(50),
CountryName varchar(250)
を、私はそれがフィールドターミネータと行ターミネータを使用して作業を取得できませんでした:
BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = '","',
ROWTERMINATOR = '\n'
)
GO
この結果は、挿入単一の行であり、最後のものを除くすべての正しいは、次の行(I制限を持っていなかった場合は、おそらく全体のデータベース)で溢れていました。また、最初のセルには最初は引用がありました。
フォーマットファイルと呼ばれるものがありました。
10.0
6
1 SQLCHAR 0 50 "," 1 FromIP ""
2 SQLCHAR 0 50 "," 2 ToIP ""
3 SQLBIGINT 0 19 "," 3 BeginNum ""
4 SQLBIGINT 0 19 "," 4 EndNum ""
5 SQLCHAR 0 50 "," 5 CountryCode ""
6 SQLCHAR 0 250 "\n" 6 CountryName ""
が、BIGINTライン上でこのエラー:ように見える作られた1行分の
メッセージ4867、レベル16、状態1、行1
バルクロードデータ変換エラー(オーバーフロー) 1、列3(BeginNum)。
最大エラー数のために10回停止してから停止します。
私はそれをExcelに取り込んで再保存すると、最初のメソッドが機能するようになりました。これによって引用符が削除されました。しかし、私はこれを毎週自動的に更新し、手動で開いて再保存する必要がないので、この方法に頼ってはいけません。
私は最終的に使用する2つの方法のどちらも、クリーンなファイルで動作する限り、気にしません。彼らのドキュメントを見ても、PHPやMS Accessのコードしかありません。
編集
CSVファイルからいくつかの行:
"1.0.0.0","1.0.0.255","16777216","16777471","AU","Australia"
"1.0.1.0","1.0.3.255","16777472","16778239","CN","China"
"1.0.4.0","1.0.7.255","16778240","16779263","AU","Australia"
"1.0.8.0","1.0.15.255","16779264","16781311","CN","China"
"1.0.16.0","1.0.31.255","16781312","16785407","JP","Japan"
"1.0.32.0","1.0.63.255","16785408","16793599","CN","China"
"1.0.64.0","1.0.127.255","16793600","16809983","JP","Japan"
"1.0.128.0","1.0.255.255","16809984","16842751","TH","Thailand"
"1.1.0.0","1.1.0.255","16842752","16843007","CN","China"
"1.1.1.0","1.1.1.255","16843008","16843263","AU","Australia"
"1.1.2.0","1.1.63.255","16843264","16859135","CN","China"
"1.1.64.0","1.1.127.255","16859136","16875519","JP","Japan"
"1.1.128.0","1.1.255.255","16875520","16908287","TH","Thailand"
更新
いくつかの永続化の後、私は物事が元のメソッドで95%を動作させることができました(なし書式文書)。しかし、それはそう見えるように少し変更されました:
BULK INSERT IPCountries2
FROM 'c:\Temp\GeoIPCountryWhois.csv'
WITH
(
FIELDTERMINATOR = '","',
ROWTERMINATOR = '"'
)
GO
すべては、彼らが必要として、私が持っている唯一の問題は、冒頭に引用がある最初の列にある右側のフィールドになります。いくつかのサンプルデータ:
FromIP ToIP BeginNum EndNum CountryCode Country
"2.21.248.0 2.21.253.255 34994176 34995711 FR France
"2.21.254.0 2.21.254.255 34995712 34995967 EU Europe
"2.21.255.0 2.21.255.255 34995968 34996223 NL Netherlands
CSVファイルから最初の数行のデータを投稿できますか? – datagod
ああ、私の愚かな私のOPで見つける – Chris
元の一括挿入では、 ''、 ''としてFIELDTERMINATORを指定します。カンマの前後に二重引用符があるのはなぜですか? – datagod