2011-12-08 3 views
0

좋아요, 가능한 한 잘 설명하려고 노력하겠습니다 ... 아주 특별한 경우입니다.여러 파일 확인

도구 : 하나 또는 여러 개의 파일의 존재 : SSIS 2008

우리는 지금 이 이벤트에 의해을 촉발 할 필요가 제어 흐름이있다. 사용되는 (2 또는 3)

변수 :

BO_FileLocation_1 
BO_FileLocation_2 
BO_FileLocation_3 
BO_FileName_1 
BO_FileName_2 
BO_FileName_3 

있을 수있는 1, 2 또는 3 개의 파일 : 상기 변수 정의. 채워지면 처리해야합니다. 파일이 비어 있으면 하나의 파일 파일 만 존재한다는 것을 의미합니다. 프로세스는 파일을 무시하고 다음 (파일 감시자) 작업으로 이동해야합니다. 예 :

BO_FileLocation_1= "C:\" 
BO_FileLocation_2 NULL 
BO_FileLocation_3 NULL 
BO_FileName_1= "test.csv" 
BO_FileName_2 NULL 
BO_FileName_3 NULL 

보고서에는 하나의 파일 만 필요합니다.

이 파일의 존재 여부를 확인하는 일반적인 개념이 필요합니다. SSIS 지식이 지금 처리 할 수있는 것보다 훨씬 일반적인 것일 수 있습니다. 예를 들어 미래에 네 번째 파일이있을 때 편리합니다. 또한 모든 논리를 처리하기 위해 단일 스크립트로 작업하려고 생각했습니다. 사전

A의

덕분에 가능하게 관련이없는 이미지 : 당신이 원하는 모든이 파일 중 하나 이상이 존재하는 Copy Source File to handle 경우 트리거 당신의 흐름에 또는 제약 조건을 사용하는 경우 enter image description here

+0

이것이 정확한 요약일까요? 데이터 흐름을 실행하기 전에 N 개의 파일이 존재하는지 확인하는 일반적인 방법은 무엇입니까? – billinkc

답변

1

.

먼저 목적지에 모든 연결 : Original layout

그런 다음 녹색 화살표 중 하나를 클릭 다음 이미지는 방법을 보여줍니다. 그러면 속성 창이 팝업됩니다. 대신 Logical OR를 선택 Logical AND :

final look

+0

이것이 위에서 설명한 실행 가능한 솔루션이라고 생각하지 않습니다. 비즈니스 요구 사항이 사용 가능한 모든 파일을 가져온 후 "무언가를 수행"하는 것이면 비즈니스 규칙을 위반하게됩니다. 하나 이상의 파일을 가져 오는 즉시 "Do something"명령을 시작합니다. 또한 작업이 완료되고 파일이없는 경우 "Do something"을 실행합니다. –

+0

질문에서 읽은 바로는 파일 중 하나만 올바르게 가져와야합니다. 나는 그것을 오해했을지도 모른다. – cfrag

+0

감사합니다 여러분의 솔루션에 감사드립니다 : 우선 순위 제한 작업을 수행 할 것입니다. (그것에 대해 생각해 봤어야했는데, 어이, SSIS의 작업/가능성을 탐험 해보세요) – laurens

1

이 몇 가지 가능한 해결 방법 :

  1. 모든 것이 잘 된 경우 precedence constraint properties

    , 당신은 지금 점선으로 연결을 볼 수

    시퀀스 컨테이너를 만들고 모든 파일 가져 오기를 시퀀스 컨테이너에 포함시킵니다. RowCountFile1, RowCountFile2 및 RowCountFile3에 int 변수를 추가하고 값을 0으로 설정합니다 (int 변수를 만들 때이 값이 기본값 임). 각 데이터 흐름에 RowCount 변환을 추가하십시오. 시퀀스 컨테이너에서 "무언가 수행"작업으로 선행 제약 조건을 만듭니다. 선행 제약 조건을 성공과 표현식으로 설정합니다. 표현식 값을 @ RowCountFile1> 0으로 설정하십시오. @ RowCountFile2> 0 || @ RowCountFile3> 0.이 접근법의 장점은 파일이 검색되는 즉시 조치를 취할 수 있으며 사용 가능한 모든 파일을 가져오고 모든 파일을 가져온 후에 작업을 수행한다는 것입니다. 그런 다음이 SSIS 패키지를 SQL Server 에이전트 작업 단계로 실행하도록 예약하고 자주 실행할 수 있습니다.

  2. 해결 방법 1의 변형은 시퀀스 컨테이너 내부의 각 파일 열거 자 컨테이너에 사용하는 것입니다.파일의 정확한 이름을 알지 못하고 일부 상황에서 둘 이상을 가져올 것으로 예상되는 경우 유용합니다. 예를 들어, 파일 이름에 타임 스탬프가있는 몇 분마다 파일을 가져오고 어떤 이유로 프로세스가 실행되지 않으면 여러 파일을 처리하여 잡아 당긴 다음 작업을 수행해야 할 수 있습니다 끝난.

  3. 질문에서 설명한대로 파일 감시자 작업을 사용할 수 있습니다. 파일 감시자 작업에서 내가 가진 유일한 문제는 패키지가 지속적으로 실행되는 상태 여야한다는 것입니다. 이로 인해 문제와 성능 문제를 해결하기가 어렵습니다. 몇 년 전에 처음 나왔을 때 파일 감시자 작업에 몇 가지 문제가 있었음을 기억하기 때문에 다른 문제도 발생할 수 있습니다. 지금은 완전히 안정적인 작업 일지 모르지만 이전에 불에 태운 후에는 작업에 대한 다른 방법을 선호합니다. 패키지가 작업에 의해 호출되는 대신 지속적으로 실행되도록하려면 스크립트 작업을 사용하여 파일을 확인하고, 스레드를 찾지 못하면 잠자기하고, 다시 확인하는 등의 작업을 수행 할 수 있습니다. 파일 감시자 작업 않습니다,하지만 난 내 자신의 C# 작업을 통해 신뢰합니다. 파일 감시자와 함께 나보다 더 나은 경험을 가진 사람에게 전원을 ...

  4. PowerShell을 사용하십시오. 파일이 나타나고 데이터를 가져 오지 않은 상태에서 작업을 수행하려는 경우 PowerShell 스크립트는 SSIS 패키지와 마찬가지로이 작업을 수행 할 수 있습니다. 단점은 몇 가지 기본적인 PowerShell을 배워야한다는 것입니다. PowerShell은 빵과 버터 핵심 언어가 아니기 때문에 향후 유지 관리가 어려울 수 있습니다. 원하는 경우 코드를 다시 SSIS 패키지로 다시 작성해야 할 수도 있습니다. 데이터를 가져 오십시오. SQL Server 에이전트 작업 단계에서 PowerShell 스크립트를 호출 할 수 있으므로 예약 작업을 매우 쉽게 처리 할 수 ​​있습니다.

내가 나열한 것보다 더 많은 옵션이 있으므로 더 많은 제안이 필요하면 알려 주시기 바랍니다.

+0

감사합니다. 당신의 솔루션에 감사드립니다. 나는 우선 순위 제한 작업을 수행 할 것입니다. (그것에 대해 생각해 봤어야했는데, 어이, SSIS의 작업/가능성을 탐험) – laurens