복붙노트

[SQL] 어떻게 SSIS에서 동적 입력 및 출력 열을 매핑하는?

SQL

어떻게 SSIS에서 동적 입력 및 출력 열을 매핑하는?

SSIS 통해 파일 .DBF에서 SQL Server의 데이터 업로드에 내가있다. 내 출력 열은 고정되어 있지만 파일이 클라이언트에서 온 있기 때문에 입력 열은 고정되지 않고 클라이언트가 자신의 스타일에 의해 데이터를 업데이트 할 수 있습니다. 일부 미 너무 열 입력 또는 열 이름 열 출력과 다를 수있을 수있다.

내가 생각했던 하나 개의 아이디어는 SQL 데이터베이스 테이블에 파일을 출력 열이 입력 열을 매핑하고 파일 ID에 대한 행에 존재 만 열을 사용하는 것이 었습니다.

하지만 할 방법을 받고 있지 않다. 당신은 같은 일을 나에게 제안 그렇지 않으면 당신은 어떤 생각을 가질 수있다?

표 실시 예.

+ -------- + --------------- + -------------- + -------- +  | FileID에 | InputColumn | OutputColumn | 액티브 |  + -------- + --------------- + -------------- + -------- +  | 1 | CustCd | CustCode | 1 |  + -------- + --------------- + -------------- + -------- +  | 1 | CNAME | CUSTNAME | 1 |  + -------- + --------------- + -------------- + -------- +  | 1 | 주소 | CustAdd | 1 |  + -------- + --------------- + -------------- + -------- +  | 2 | CUST_CODE | CustCode | 1 |  + -------- + --------------- + -------------- + -------- +  | 2 | 고객 이름 | CUSTNAME | 1 |  + -------- + --------------- + -------------- + -------- +  | 2 | 위치 | CustAdd | 1 |  + -------- + --------------- + -------------- + -------- +

해결법

  1. ==============================

    1.당신이 유사한 테이블을 작성하는 경우, 동적 SSIS 패키지 내부에 열을 매핑이 접근 방식에서 사용하거나 프로그램 전체 패키지를 구축해야합니다. 이 대답에 난 당신에게 그 작업을 수행하는 방법에 대한 몇 가지 통찰력을 제공하기 위해 노력할 것입니다.

    당신이 유사한 테이블을 작성하는 경우, 동적 SSIS 패키지 내부에 열을 매핑이 접근 방식에서 사용하거나 프로그램 전체 패키지를 구축해야합니다. 이 대답에 난 당신에게 그 작업을 수행하는 방법에 대한 몇 가지 통찰력을 제공하기 위해 노력할 것입니다.

    참고 : 모든 .DBF 파일이 같은 열이 셀 경우이 방법에만 작동합니다하지만 이름의 differents 있습니다

    이 방법에서 당신은 FileID에 당신이 만든 매핑 테이블을 기반으로 소스로 사용되는 SQL 명령을 생성합니다. 알고 있어야합니다 당신은 FileID에와 변수 안에 저장된 .dbf 파일의 경로입니다. 예를 들어 :

    테이블 이름은 inputoutputMapping이라고 가정

    다음 명령을 사용하여 SQL 실행 태스크 추가 :

    DECLARE @strQuery as VARCHAR(4000)
    
    SET @strQuery = 'SELECT '
    
    SELECT @strQuery = @strQuery + '[' + InputColumn + '] as [' + OutputColumn + '],'
    FROM inputoutputMapping
    WHERE FileID = ?
    
    SET @strQuery = SUBSTRING(@strQuery,1,LEN(@strQuery) - 1) + ' FROM ' + CAST(? as Varchar(500))
    
    SELECT @strQuery
    

    그리고 매개 변수 매핑 탭에서 매개 변수 0 매개 변수 1 (테이블 이름으로 대체)을 .dbf 파일 이름을 포함하는 변수에 매핑 할 FileID에 들어있는 변수를 선택

    예를 들어 문자열 형식의 변수 안에 설정 공을 단일 행에 ResultSet의 유형을 설정하고 결과를 저장 @ [사용자 :: 소스 쿼리]

    결과 집합 값은 다음과 같이 될 것입니다 :

    SELECT [CustCd] as [CustCode],[CNAME] as [CustName],[Address] as [CustAdd] FROM database1
    

    OLEDB를 소스에서 변수 사용에서 SQL 명령으로 테이블 액세스 모드를 선택 @ 소스로 [사용자 :: SourceQuery] 변수를.

    이 방법에서는 데이터 흐름 태스크 내부 원본으로 스크립트 구성 요소를 사용해야합니다 :

    우선, 당신은 당신이 그들을 하드 코드하지 않으려면 .dbf 파일 경로 및 변수를 통해 스크립트 구성 요소에 대한 SQL Server 연결을 통과해야합니다.

    스크립트 편집기 내부는 대상 테이블에있는 각 열에 대한 출력 열을 추가해야하며 대상에 매핑.

    스크립트 내부에서, 당신은 데이터 테이블에 .dbf 파일을 읽을 수 있어야합니다 :

    데이터 테이블에 데이터를로드 한 후, 또한 데이터는 SQL 서버에서 만든 MappingTable에서 찾을 수있는 다른 데이터 테이블을 작성하십시오.

    DataTable의 컬럼을 통해 그 루프 예를 들어, 해당 출력 열로 .Column 이름 변경 후 :

    foreach (DataColumn col in myTable.Columns)
        {
    
        col.ColumnName = MappingTable.AsEnumerable().Where(x => x.FileID = 1 && x.InputColumn = col.ColumnName).Select(y => y.OutputColumn).First(); 
    
        }
    

    과 데이터 테이블의 각 행에 대해 반복 한 후 스크립트 출력 행을 생성합니다.

    열이있는 경우 또한, 참고 출력 행을 할당하는 반면에, 당신은 당신이 먼저, 문자열의 목록에 모든 열을 이름을 추가 예를 들어, 확인하는 데 사용할 수 있습니다 확인해야합니다 :

    var columnNames = myTable.Columns.Cast<DataColumn>()
                                 .Select(x => x.ColumnName)
                                 .ToList();  
    
    
    foreach (DataColumn row in myTable.Rows){
    
    if(columnNames.contains("CustCode"){
    
        OutputBuffer0.CustCode = row("CustCode");
    
    }else{
    
        OutputBuffer0.CustCode_IsNull = True
    
    }
    
    //continue checking all other columns
    
    }
    

    당신이 소스로 스크립트 구성 요소를 사용하는 방법에 대한 자세한 내용은 필요한 경우, 다음 링크 중 하나를 확인 :

    난 당신이, 당신은 함께 가야 동적으로 패키지를 구축 할 수있는 선택의 여지가있다를 제외하고이 목표를 달성하는 데 사용할 수있는 다른 방법이 있다고 생각하지 않습니다

    최근 전 C #을 사용하여 개발하는 클래스 라이브러리입니다 힘내 - 허브에 새 프로젝트를 시작했다. 당신은 스키마 매핑 방식을 사용하여 다른 스키마 정의와 SQL 서버 테이블에 엑셀, 워드, 파워 포인트, 텍스트, CSV, HTML, JSON 및 XML에서 테이블 형식의 데이터를 가져올 때 사용할 수 있습니다. 그것을에서 체크 아웃 :

    당신은 단계별 가이드이 위키 페이지를 따를 수 :

  2. from https://stackoverflow.com/questions/54781017/how-to-map-input-and-output-columns-dynamically-in-ssis by cc-by-sa and MIT license