2011-11-08 4 views
0

사용자 지정 데이터 흐름 구성 요소를 개발 중입니다. 내가 정의한 사용자 정의 속성 중 하나에는 정확하게 출력 열 수에 관한 정보가있는 문자열이 포함되어 있습니다. 열의 이름 (4 일 수도 있고 5 일 수도 있지만 50 일 수도 있음)이 들어 있습니다.입력 매개 변수에 따라 출력 열 수가있는 데이터 흐름 구성 요소. SSIS 사용자 지정 데이터 흐름 구성 요소

따라서 출력 열 수는 가변적입니다. 필자는 입력에 따라 다양한 출력 열이있는 구성 요소를 갖는 방법을 (또는 가능할지라도) 파악할 수 없습니다.

아무에게도 수행 방법에 대한 아이디어가 있습니까? 감사

UPDATE

좋아. 따라서 디자인 타임에 필자는 사용자 정의 속성을 조사하고 필요한 열을 작성했습니다. 어떤 방법으로 이것을해야합니까?

나는 ProvideComponentProperties이 시도 :

this.fields_ = this.ComponentMetaData.CustomPropertyCollection["Fields"].Value.ToString().Split(new Char[] { ',' }); 

    foreach (string _field in fields_) 
    { 
     IDTSOutputColumn100 _outputCol = ComponentMetaData.OutputCollection[0].OutputColumnCollection.New(); 
     _outputCol.Name = _field; 
     _outputCol.SetDataTypeProperties(DataType.DT_STR, 20, 0, 0, 1252); 
    } 

은 기본적으로 fields_이처럼 문자열을 분할합니다 :

PRVT_PLACE,OPT_IMPLIED_VOLATILITY_MID,OPT_IMPLIED_VOLATILITY_YEST

을 그리고 각 필드에 대해 내가 출력 열을 만들려고합니다.

그때 내 구성 요소를 삭제하고 fields_ 속성을 설정하지만, 나는 다음과 같은 메시지가 :

하나의 열은 위의 예 ...

의 4 대신 빈 이름으로 작성됩니다
The name for "output column" "(93)" is blank and names cannot contain blanks. 

내가 뭘 잘못하고 있니?

답변

0

나는 결국 해결책을 찾았습니다. 그것은 정확한 일은 아니지만 그것은 나의 필요에 어울립니다.

OnOutputPathAttached 메서드를 오버로드했습니다. 이 방법에서는 fields_ 속성을 살펴보고 숫자를 기준으로 열을 추가합니다.

ComponentMetaData.OutputCollection[0].OutputColumnCollection.RemoveAll(); 
string[] fields = this.ComponentMetaData.CustomPropertyCollection["Fields"].Value.ToString().Split(new Char[] { ',' }); 
foreach (string _field in fields) 
{ 
    IDTSOutputColumn100 _outputCol = ComponentMetaData.OutputCollection[0].OutputColumnCollection.New(); 
    _outputCol.Name = _field; 
    _outputCol.SetDataTypeProperties(DataType.DT_STR, 20, 0, 0, 1252); 
} 

base.OnOutputPathAttached(outputID); 
2

SSIS는 런타임 중에 메타 데이터를 변경하지 않아야합니다. 즉, 디자인 타임에 원하는만큼 메타 데이터를 재생할 수 있지만 패키지가 실행되면 원본, 대상 (외부 메타 데이터 : db, 파일, ...) 및 파이프 라인 메타 데이터를 변경할 수 없습니다. 패키지가 예상대로 작업을 수행 할 수 있도록하는 것이 안전 메커니즘입니다.

물론 경고 만 발생하는 메타 데이터가 변경되었습니다. 예를 들어 oledb 대상은 열 데이터 형식이 DT_I2에서 DT_I4 (SQL Server의 smallint -> int)로 변경되었음을 감지하지만 작동합니다. SQL Server 대상과 같은 일부 다른 구성 요소는 메타 데이터를 변경할 수 없습니다.

요약 : 디자인 타임에 출력 열 수를 변경하는 사용자 지정 구성 요소를 만들 수는 있지만 런타임 또는 열 형식을 변경할 수는 없습니다.

+0

확인을 참조하십시오. 당신의 도움을 주셔서 감사합니다 – nche

0

확실히 ReinitializeMetaData()를 재정 의하여해야합니다. 다양한 출력 열 수 (잠재적으로 각각 다른 출력 열이있는 경우)를 지원하는 경우에만 OnOutputPathAttached를 수행합니다.

라고 생각합니다.

내가 디자인 시간 기압 unsucessfully 노력하고 무엇을 보여 내 질문을 편집 한, http://technet.microsoft.com/en-us/library/ms135954.aspx

관련 문제