2012-07-15 3 views
2

SQL 테이블에 여러 개의 XML 파일을 가져 오는 SSIS 패키지가 있습니다. XML 가져 오기가 끝나면 Execute SQL 작업을 실행하여 일부 레코드를 업데이트하고 아직 존재하지 않는 레코드를 가져옵니다. 작업 중 하나는 전화 번호를 기반으로 사용자 로그인을 만듭니다. 소스 데이터에 오류가 있거나 숫자가 입력되지 않았거나 중복 된 숫자가 입력되는 경우가 있습니다. 데이터 엔트리를 제어 할 수는 없지만 userlogon 테이블에는 고유 한 값이 필요합니다.SSIS의 트랩 오류 행 SQL 실행 작업

단순히 PK 위반 오류를 무시하고 다음 레코드를 계속 실행 SQL 작업을 구성 할 수 있습니까?

가 여기에 SQL 코드 : 당신은 당신 같은 쿼리를 제출하려는 경우

insert into Logins 
select REPLACE(LTRIM(REPLACE(Customer_Number, '0', ' ')), ' ', '0'), RIGHT(customer_number,4) + EFFDAT, Company_Name, Customer_Number, Email_Address, 0, CU_Allow_Web_Ordering, 0, 0, 1 from CUSTOMER_MASTER_FILE where CUSTOMER_NUMBER not in 
(select CustomerNumber from Logins) 
+0

이 설정 방법 SSIS에서 오류를 잡아낼 수 있는지 확신 할 수 없지만 (이것이 잘못된지 알고 싶습니다.) 아마도'Customer_Number'가'Logins'에서 PK를 위반했기 때문에 인서트가 실패했을 것입니다,하지만 당신은 존재하지 않는 것을'CUSTOMER_NUMBER'의 _UN 변환 된 버전에서만 검사하고 있습니다. . 게다가, 당신은'WHERE' 절과'LEFT JOIN' 절에서 체크를 옮기는 것이 낫습니다. 이해가 되니? –

+0

나는 당신이 말하는 것을 얻습니다. 실제로 잘못된 코드를 게시했지만, 내가하려는 것은 유사합니다. 다른 소스의 로그인 테이블에 삽입하는 것과 비슷합니다. 나는 왼쪽 조인으로 바꿨지 만 물론 PK 위반으로 여전히 타격을 입었습니다. 나는 SSIS 내에서 내가하려고하는 일을 성취 할 수있는 방법이 있는지 궁금해했다. 단순히 중복되는 PK 값으로 기록을 건너 뛰기 만하면된다. – Kerberos42

+0

업데이트 코드 : INSERT INTO LOGINS 선택 DISTINCT REPLACE (CDA_PHONE, '-', ''), LEFT (CDA_NAME, 4) + RIGHT (CDA_PHONE, 4), CDA_NAME, CDA_CUSTOMER_NUMBER, CDA_EMAIL, 1, CDA_ALLOW_WEB_ORDERING, 0, 0 (- ',' ', CDA_PHONE') = USERID 여기서 <> CDA_PHONE '선택에 000-000-0000' – Kerberos42

답변

0

, 당신은 기운 다. 예를 들어, 10 행의 일괄 처리를 제출하고 8을 커밋하고 2를 커밋합니다.

나는이 솔루션이 좋다고 생각하지 않는다. 데이터를 삽입하기 전에 로그인이 존재하는지 테스트해야한다고 생각하지만, 원한다면 구성 요소의 maxNUmberOfErrors를 매우 큰 숫자로 구성하고 루프 구성 요소에 로그인을 하나씩 삽입하십시오. 구성 요소 실패는 실패 횟수가 maxNUmberOfErrors에 도달 할 때까지 패키지 실패를 발생시키지 않습니다.