2013-01-16 3 views
2

대량 삽입 문을 사용하고 MAXERRORS를 사용하지 않도록 설정할 수있는 방법이 있습니까?대량 삽입 MAXERRORS

일괄 삽입하는 파일에서 오류 수가 높을 수 있으므로이 파일을 제어 할 수없고 현재 공급 업체와 협력 중입니다. 오류가 무한히 많습니다. 특정 행에 대한 문제 해결).

비활성화 할 수없는 경우 MAXERRORS에서 처리 할 수있는 최대 수는 얼마입니까? 2147483647인가요?

+0

일반적으로 오류는 유형 변환 오류입니다. 먼저 모든 문자 인 준비 테이블에 데이터를 가져온 다음 별도의 단계로 변환합니다. 10 억은 실제로 충분히 크지 않은가? –

+0

스테이징 테이블에 대해 알기 위해 훌륭한 리소스에 대한 링크를 제공 할 수 있습니까? 외부 파일의 데이터를 가져 오는가? –

답변

2

일반적으로 외부 소스에서 데이터를 가져올 때 데이터에 매우주의해야합니다. SQL Server는 여러 가지 솔루션을 제공합니다. 많은 사람들이 SSIS를 사용합니다. 나는 SSIS를 피한다. 그 이유 중 하나는 사용자가 이미 연 Excel 파일을 여는 것입니다. 또한 몇 가지 단점이 있습니다.

어떤 경우에도 데이터가 텍스트 파일에 저장되면 데이터 형식이 varchar(8000) 인 원본 테이블의 모든 열을 포함하는 준비 테이블을 만듭니다. 이것은 필요 이상으로 커지는 경향이 있지만 충분해야합니다.

그럼, 적절한 열이있는 테이블을 생성하고, 인구는 같은 것을 사용 : 나는 오류를 방지하기 위해 case 문을 사용하여, SQL 코드에서 유형 검사를 할 것입니다

insert into RealTable (CharColumn, IntColumn, FloatColumn, DateTimeColumn) 
    select CharColumn, 
      (case when isnumeric(IntColumn) = 1 and IntColumn not like '%.%' then cast(IntColumn as int end), 
      (case when isnumeric(FloatColumn) = 1 then cast(FloatColumn as float) end), 
      (case when isdate(DateColumn) = 1 then cast(DzteColumn as date) 
    from StagingTable st 

. 형식이 일치하지 않으면 NULL 값이 반환됩니다. 그런 다음 StagingTable을 사용하여 데이터베이스의 값을 조사하여 문제를 파악할 수 있습니다.

  • RealTableId의 INT 신원 (1,1)
  • CreatedBy의 VARCHAR (255) 기본 SYSTEM_USER,
  • CreatedAt 날짜 기본 GETDATE (:

    는 또한, RealTable에, 난 항상 다음과 같은 열이)

이들은 종종 유용하게 사용되는 데이터에 대한 추적 정보를 제공합니다.

+0

이것은 매우 도움이됩니다. 도움을 주셔서 감사합니다. –

+0

실제로 가장 우아한 솔루션 ... – Wouter