반응형


패키지 외부에서 데이터 원본 대상 설정하기

 

한대성

MS SQL Server MVP

에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자

 

 

 

 Question
폴더 A -- 노트북1.txt/데스크탑3.txt/키보드5.txt/마우스7.txt
폴더 B -- 노트북2.txt/데스크탑7.txt/키보드3.txt/마우스9.txt
폴더 C -- 노트북5.txt/데스크탑9.txt/키보드6.txt/마우스3.txt
 
예를들어 위와같이 각 폴더에 4개의 text 파일이 존재합니다.
이 파일들은 1개의 DB에 그리고 각각 다른 테이블에  insert하게 됩니다.
 이것을 패키지로 실행유틸리티로 했을때 A폴더에 대한 데이터를 실행해야하고, B폴더에 대한 데이터를 실행해야하고, C폴더에 대한 데이터를 실행해야합니다. 폴더의 경로가 다르고, 파일명도 조금씩 다릅니다. 즉, 패키지를 실행할때마다, 선택해야하는 경로 및 파일이 바뀌어야합니다. 이런경우 패키지 실행전에 경로&파일에 대한 설정을 그때그때 바꿔서 작업을 할수 있는지 궁금합니다.

 

 

 

다음과 같이 GroupA, GroupB, GroupC 라는 디렉터리에 여러 텍스트 데이터 파일들이 있는 경우를 가정합니다.


 

각각의 텍스트 파일은 동일한 열을 가집니다.

 

그리고 대상 테이블로 TableA, TableB, TableC 있습니다.

USE TEMPDB

GO

 

CREATE TABLE TABLEA

(

                  [Group] varchar(20),

                  [File] varchar(20),

                  Qty INT,

                  Amount Money

)

GO

 

CREATE TABLE TABLEB

(

                  [Group] varchar(20),

                  [File] varchar(20),

                  Qty INT,

                  Amount Money

)

GO

 

CREATE TABLE TABLEC

(

                  [Group] varchar(20),

                  [File] varchar(20),

                  Qty INT,

                  Amount Money

)

GO

 

 

예제에서 만들려고 하는 기능은, 단순히 텍스트 파일에서 대상 테이블로 넣는 패키지를 만든 , 패키지를 실행할 텍스트 파일과 대상 테이블 지정할 있는 것을 구현하고자 합니다.

 

 

패키지에 위에서 만든 데이터베이스에 대한 OLE DB 연결을 추가합니다.


 


또한
, 연결 관리자 내부에서 마우스 오른쪽을 클릭해서 나타나는 메뉴 파일 연결(A) 선택한 , 아래와 같이 연결 관리자 이름 파일 이름을 지정합니다. 파일 이름은 준비된 데이터 파일들 아무거나 선택합니다.

 


이제
탭을 클릭한 , 텍스트 파일에 대한 / 구분 기호를 확인하고, 고급 탭을 클릭해서 열에 대한 이름과 유형을 설정합니다.

 


Group
File 길이 20 String형으로 설정하고 Qty Amount 부호 없는 4바이트 정수로 설정합니다.


 

, 이제 도구 상자에서 데이터 흐름 작업을 추가한 , 다음과 같이 파일로부터 대상 테이블에 넣는 기능을 간단히 구현합니다.

      

  

    

   ( 부분은 간단히 넘어가겠습니다. 이전의 예제들을 참고하시기 바랍니다.)

 

, 여기까지 해서 간단히 기능을 구현하였습니다.

 

 

이제부터 동적으로 패키지를 구현할 있는 기능들을 추가해 보도록 합시다.


우선
, 제어 흐름을 클릭한 , 제어 흐름 영역의 곳을 클릭하고선, 마우스 오른쪽 버튼을 눌러서 나타나는 메뉴 중 에서 변수(S) 클릭하여 변수 설정 창을 띄웁니다.

   


아래와
같이 SourceFile TargetTable 이라는 개의 String 변수를 추가합니다. , 값에다가는 임시로 File 명과 Table 명을 입력하도록 합니다.

   


패키지
외부에서 변수에 값을 할당하면 변수들이 텍스트 원본 대상 테이블에 지정이 되는 방식으로 구현할 것입니다.

 

일단 위와 같이 추가했으면, 연결 관리자의 SourceFile이라는 연결을 선택한 , 오른쪽에 있는 속성 창의 여러 항목 Expressions 부분에 있는 ... 버튼을 클릭합니다.

   


속성을
ConnectionString 선택하고, 옆의 부분에서 ... 버튼을 클릭해서 나타나는 작성기 창에서 아래와 같이 @[사용자::SourceFile] 이라는 변수를 추가하고 확인을 누릅니다.

   

 

이제, 데이터 흐름 작업을 더블 클릭한 나타나는 데이터 흐름 영역에서 OLE DB 대상을 클릭해서 OLE DB 대상 편집기를 엽니다.

 


데이터
액세스 모드(A) 부분을 아래와 같이 테이블 이름 또는 이름 변수』로 변경하고 아래의 변수 이름(V) 부분에 위에서 추가한 TargetTable이라는 변수로 지정합니다.

 

   

 

, 이제 패키지가 완성되었습니다. 패키지를 D:\Sample.dtsx 라는 이름으로 저장하도록 하겠습니다.

 

 

 

우선 패키지를 그냥 실행시키면 기본값으로 지정된 D:\Directory\GroupA\Desktop3.txt 파일로부터 tempdb.dbo.TableA 입력됩니다. 

   

   

 

만약, D:\Directory\GroupB\Keyboard3.txt 이라는 파일을 tempdb.dbo.TABLEB라는 테이블로 입력하고 싶다면 다음과 같이 설정하면 됩니다.

 

우선 D:\Sample.dtsx 패키지를 더블 클릭해서 패키지 실행 유틸리티(DTEXECUI) 띄웁니다.

   


설정 탭을 클릭한 , 다음과 같이 속성과 값을 추가합니다.

 

 

속성 경로

\Package.Variables[사용자::SourceFile].Properties[Value]

D:\Directory\GroupB\Keyboard3.txt

\Package.Variables[사용자::TargetTable].Properties[Value]

tempdb.dbo.TABLEB

 

일단, 이와 같이 설정한 후 패키지를 실행합니다.

 

 

 


, 그럼 매번 이렇게 해야 할까요? 조금 편하게 설정합시다. (배치 파일로 만들어서 사용하기) 


패키지
실행 유틸리티 창에서 가장 아래에 있는 명령줄 탭을 클릭해서 나타나는 명령줄을 확인합니다. 

 

/FILE "D:\Sample.dtsx" /MAXCONCURRENT " -1 " /CHECKPOINTING OFF  /REPORTING EWCDI  /SET "\Package.Variables[사용자::SourceFile].Properties[Value]";"D:\Directory\GroupB\Keyboard3.txt" /SET "\Package.Variables[사용자::TargetTable].Properties[Value]";"tempdb.dbo.TABLEB"

 

위와 같은 명령줄이 생성되었습니다. 이를 어디에 이용하느냐..
dtexec.exe
라는 커맨드 형식의 패키지 실행 유틸리티가 있습니다.

 

아래와 같이 배치 파일을 만들어서 사용하면 됩니다.

   

 

   

 

   

 

 

SQL Agent 작업으로 등록할 때에도 위와 비슷합니다. 작업 유형 부분에서 Integration Services 패키지를 선택하면 위와 같이 패키지의 여러 속성을 설정할 있는 탭이 나타나며, 설정 부분에서 원하는 속성을 설정하면 됩니다.

 

 

 

 본 게시판에 실린 글은 누구나 복사하셔서 이용하셔도 되지만, 반드시 출처(SQLLeader.com) 링크를 밝혀주셔야 합니다.
반응형

+ Recent posts