2013-03-27 3 views
0

oledb 데이터 소스가있는 데이터 흐름이 있습니다. 그런 다음 세 개의 웹 서비스 호출을 수행하는 스크립트 구성 요소가 있는데, 이는 입력 행 (입력 행당 하나의 출력 행)과 동기하는 두 개의 출력을 가지며 비동기 적 출력 (각 입력에 대해 많은 행을 출력 함) 열). 각 출력은 sql update 명령으로 이동합니다. 오류 로그 출력 (asynch)도 있습니다.입력 행당 하나의 트랜잭션을 수행하려면 어떻게합니까?

각 입력 행에 대해 행이 완전히 처리되고 업데이트되지 않으면 어떤 입력 행에 대한 업데이트도 성공하지 않도록 트랜잭션에서 어떻게 든 출력을 래핑하려고합니다.

내가 알 수있는 바로는이 방법은 스크립트가 각 입력 행을 처리하고 업데이트 명령으로 이동하기 전에 모든 것을 버퍼에 출력한다는 것입니다. 대신 행별로 모든 업데이트를 수행하고 각 입력 행을 처리하고 업데이트 할 때 변경 사항을 커밋해야합니다.

데이터 흐름을 구성하려면 어떻게해야합니까?

아마 소스를 실행 한 다음 foreach 컨테이너를 통해 레코드를 실행하는 것이 좋겠지 만 ForEach 컨테이너를 통해 여러 DataFlows를 함께 연결하는 방법을 잘 모르겠습니다.

답변

0

여기 해결책은 변수에 배치 된 레코드 집합으로 사용자를 선택하는 데이터 흐름 작업을 만드는 것입니다.

그런 다음 For Each 컨테이너를 사용하여 레코드 세트를 읽고 변수에 사용자 이름을 넣습니다. 각 측면에서 For Each, 변수를 매개 변수로 사용하여 사용자를 다시 선택하는 OLEDB 소스가있는 데이터 흐름이 있습니다 (이 결과는 데이터 집합의 각 반복에 대한 조회 결과이지만 괜찮습니다).

이것은 내 스크립트에 들어갑니다.

또한 DTC 트랜잭션을 사용할 필요가 없도록 각 루프에 대해 패키지 앞뒤에 SQL 실행 태스크를 배치하고 각 입력 행을 별도의 트랜잭션으로 처리 할 수 ​​있습니다.

0

을 모두 포함하여 단일 스크립트로 업데이트하는 것이 유일한 방법이라고 생각합니다. SSIS는 충분한 수준의 제어를 제공하기 위해 데이터 흐름 버퍼링 전략을 충분히 공개하지 않습니다. 실제로 파이프 라인 내에서 속도를 높이는 데는 많은 시간이 걸리지 만 찾고있는 조절 전략의 반대입니다. 어떤 튜닝 기능을 사용할 수 있는지에 대한 설명은 MSDN의 Data Flow Performance Features을 참조하십시오.

또는 사용자 지정 대상 파이프 라인 구성 요소를 완전히 빌드 할 수 있습니다. 디버깅 스크립트 구성 요소가 SSIS 2008에서 얼마나 고통 스러운지 알고 있다면 이는 바람직한 접근 방법 일 수도 있습니다.

+0

정보를 제공해 주셔서 감사합니다. 그러나 전략을 변경하기로 결정하고 모든 것을 여러 가지 출력으로 하나의 스크립트로 옮겼습니다. 나는 내 질문에 완전히 변했고 나는 당신이 내 이전 질문에 대답하고 있다고 생각한다. –

관련 문제