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)
이 설정 방법 SSIS에서 오류를 잡아낼 수 있는지 확신 할 수 없지만 (이것이 잘못된지 알고 싶습니다.) 아마도'Customer_Number'가'Logins'에서 PK를 위반했기 때문에 인서트가 실패했을 것입니다,하지만 당신은 존재하지 않는 것을'CUSTOMER_NUMBER'의 _UN 변환 된 버전에서만 검사하고 있습니다. . 게다가, 당신은'WHERE' 절과'LEFT JOIN' 절에서 체크를 옮기는 것이 낫습니다. 이해가 되니? –
나는 당신이 말하는 것을 얻습니다. 실제로 잘못된 코드를 게시했지만, 내가하려는 것은 유사합니다. 다른 소스의 로그인 테이블에 삽입하는 것과 비슷합니다. 나는 왼쪽 조인으로 바꿨지 만 물론 PK 위반으로 여전히 타격을 입었습니다. 나는 SSIS 내에서 내가하려고하는 일을 성취 할 수있는 방법이 있는지 궁금해했다. 단순히 중복되는 PK 값으로 기록을 건너 뛰기 만하면된다. – Kerberos42
업데이트 코드 : 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