Maxmind - http://www.maxmind.com/app/geolitecountry에서 GeoLiteCountry
CSV 파일을 다운로드했습니다. 필자는 표준 형식으로이 형식을 사용하여 (자동화 된 작업이 될 수 있도록) 모든 데이터를 테이블로 가져 오려고 시도하고 있습니다. 내가 찾을 수있는 코드의 다양한 덩어리를, 나는 그것이 필드 종료 및 행 종결를 사용하여 작업을 진행 할 수 없습니다 사용Maxmind CSV를 SQL Server로 가져 오기
FromIP varchar(50),
ToIP varchar(50),
BeginNum bigint,
EndNum bigint,
CountryCode varchar(50),
CountryName varchar(250)
:
나는 정확히 열을 일치 열이IPCountries2
가 제공하는 새로운 테이블을 생성 이의
BULK
INSERT CSVTest
FROM 'c:\csvtest.txt'
WITH
(
FIELDTERMINATOR = '","',
ROWTERMINATOR = '\n'
)
GO
결과는 삽입 한 행, (나는 한계를 가지고 있지 않은 경우 아마도 전체 데이터베이스) 마지막이 다음 라인으로 넘쳐 있었다 제외한 모든 정확했다. 또한 첫 번째 셀에는 처음에 견적이있었습니다.
나는 주위를 둘러 보았고 포맷 파일이라고 불리는 것을 발견했다. 처럼 보이는 한 제작 :
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 라인에 오류 :
메시지 4867, 수준 16, 상태 1, 줄 1
행 대량로드 데이터 변환 오류 (오버플로) 1, 3 열 (BeginNum).
오류 횟수가 최대 10 회이므로 최대 오류 수 때문에 중지됩니다.
Excel로 가져 와서 다시 저장하면 첫 번째 방법을 사용할 수 있었지만이 방법은 따옴표를 제거했습니다. 그러나 매주 자동으로 업데이트하고 수동으로 열고 다시 저장할 필요가 없기 때문에이 방법을 사용하고 싶지 않습니다.
깨끗한 파일로 작동하는 한 궁극적으로 사용하는 두 가지 방법 중 마음에 들지 않습니다. 나는 그들의 문서를 보았지만 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
아, 그래 어떻게 나를 바보, 원래 대량 삽입에 내 영업 – Chris
에서 발견, 당신은 ' ","'와 같은 FIELDTERMINATOR를 지정합니다. 콤마 (,)를 큰 따옴표로 묶는 이유는 무엇입니까? – datagod