2012-09-12 3 views
2

이 주제와 관련된 다른 스레드가 있음을 알고 있지만 아직까지는 내 필요만큼 구체적이지는 않습니다.SQL Server로 가져 오기 전에 CSV 파일 유효성 확인

내가 관리하는 SQL Server 데이터베이스로 가져올 CSV 파일이 있습니다. 인간에 의해 만들어지기 때문에 너무 많은 열, 잘못된 데이터 형식, 손상된 헤더 등의 오류가있을 수 있습니다.

사용자의 파일을 서버의 디렉토리에 수신 할 수있는 웹 양식을 가지고 있으며 그 다음 줄로 문자열을 읽고 셀별로 파싱 한 다음 정확한 셀 수를 확인한 후 이동합니다 다음 줄로.

데이터 유형 및 범위의 유효성을 검사하는 데있어 가장 좋은 방법이 확실하지 않습니다. 숫자 형식에 대한 수동 범위 검사와 같은 일을하는 것은 다소 고풍스러운 것 같습니다.

더 좋은 방법이 있습니까? 몇 가지;

  1. "numeric"과 같은 SQL Server 유형도 있지만 nvarchar도 있습니다.

  2. 파일 크기는 몇 킬로바이트만큼 작거나 기가 바이트 이상일 수 있습니다.

  3. x가 실패한 것이 아니라 오류가있는 특정 행과 열을보고해야합니다.

나는 예외를 잡기 덩어리로 데이터를 분할 및 병렬로 검사를 수행하는 스레드를 생성/변환하려고 생각 했을까 예상되는 유형으로 셀 값을 캐스팅? 사전에

감사합니다.

+0

데이터 저장소가 SQL Server 인 경우 SSIS를 사용해야한다고 생각합니다. SSIS 패키지를 만들고 C# http://www.codeproject.com/Articles/28096/Excecute-SSIS-package-DTSX-from-ASP-Net을 사용하여 SSIS 패키지를 실행 해보십시오. 이렇게하면 특정 데이터 형식에 대한 열의 매핑이 처리됩니다 . –

+0

사이트 MVC3입니까? 그렇다면 모델/뷰 모델 및 데이터/유효성 검사 주석을 살펴보십시오.그런 다음 새 ObjectX를 만들고 CSV 행에서 채우고 유효성 검사를 수행하여 행 (전체 객체) 및 속성이 유효한지 확인한 후 그에 따라보고하고 적합한 경우 저장하십시오. – BlueChippy

+0

이것은 표준 ASP.Net C# 웹 응용 프로그램입니다. 웹 애플리케이션 자체의 유효성 검증을 유지하여 데이터베이스 중단 및/또는 유지 관리 기간에 방해받지 않도록 노력하겠습니다. C# 코드 내에 더 좋은 방법이 있습니까? – flipcode

답변

1

bulc 복사본을 사용하는 것이 좋습니다. SSIS는 훨씬 복잡하고 오류가 발생하기 쉽습니다 (정상적인 상황에서도 훨씬 느립니다 ...).

일반적으로 원하는 열을 알고 올바른 형식의 가져온 데이터에 대해 "가져 오기 단계 테이블"을 만들고 싶습니다. 전체 파일이 TSQL의 최소 요구 사항 (열 개수)에 맞지 않는 경우 전체 파일을 거부 할 수 있습니다 (bulc 삽입 주위의 "try/catch"포함).

초기 가져 오기 후에 변환 및 유형 확인을 수행 할 수 있습니다. 이를 위해 스테이지 테이블에 올바른 형식으로 추가 열을 넣는 것이 유용 할 수 있습니다. 예 : nvarchar 열로 가져 와서 10 진수 값으로 변환 할 수 있습니다. 뷰 "myImportTable_InsertView"아래 excample 당신이 모든 검증을 마친 후

DECLARE @SQLString nvarchar(4000) = 

    INSERT dbo.myImportTable_InsertView 
    FROM ''' + @FullFilename + ''' WITH 
    (
    FIELDTERMINATOR = '';'', 
    ROWTERMINATOR = ''\n'', 
    CODEPAGE= ''RAW'' 
    )' 
    Exec (@SQLString) 

(단계 테이블 유형 검사에 대한 더 많은 열이) 무대 테이블에서만 가져온 열을 선택합니다 : 여기에 트릭보기를 사용하는 것입니다 스테이지 테이블의 데이터를 최종 목적지로 복사하기 만하면됩니다.

오류가있는 행을보고하려면 보통 여러 가지 종류의 오류를 표시하기 위해 스테이지 테이블 행에 플래그를 사용합니다.

관련 문제