본문 바로가기
DataBase/MS-SQL

[본문스크랩] PC에 저장되는 파일을 MS-SQL2005로 가져오기

by 백룡화검 2010. 4. 24.

식을 이용하여 파일명 변경하기

 

이번 건 역시 Q&A에 올라온 내용에 대한 답변 차원에서 작성하는 내용입니다.

 

[상황]

 

예를 들어 d:\test.txt라는 이름의 매일 생성되는 파일을 test_20070110.txt 와 같이 수행되는 날짜가 덧붙여진 파일 명으로 변경(or 복사)하는 작업을 구현하고자 합니다.

 

 

이와 같은 작업을 구현하는 예로 두 가지를 설명하겠습니다. 하나는 파일 시스템 작업을 이용하는 것이고, 다른 하나는 스크립트 작업을 이용하는 것입니다.

 

 

[파일 시스템을 이용하는 방법]

연결 관리자에서 두 개의 파일 연결을 정의합니다. 하나는 원본 파일(d:\test.txt)을 가리키며, 다른 하나는 대상 파일(d:\test_<년월일>.txt)를 가리키는 연결입니다.

이 때, 원본 파일은 현재 존재하기 때문에 다음과 같이 기존 파일로 정의합니다.

 

대상 파일 연결은 아직 파일이 없는 상태이기 때문에 다음과 같이 새 파일 생성으로 설정을 하고 파일 명은 임의로 지정합니다.

 

그러고선, 보기 좋게 연결 관리자의 각 연결의 이름을 변경해 줍니다. (실행에는 전혀 영향이 없으며 그냥 보기 좋~게 하기 위하여~^^)

 

자 그럼, 이제 도구 상자에서 파일 시스템 작업을 끌어다가 제어 흐름 영역에 추가한 후 속성 창을 엽니다.

위와 같이 파일 이름 바꾸기로 작업 유형을 지정하고, 원본 및 대상을 지정합니다.

 

여기까지가 SourceFile이라는 연결 정보가 가리키는 파일을 TargetFile이라는 연결 정보가 가리키는 파일로 변경해 주는 작업입니다.

, 그럼 우리가 원하는 작업인 대상 파일명을 일자 형식으로 변경하는 것은 어디서 해 줘야 할까요.?

파일 시스템 작업?, 연결?  연결이겠지요.. 정확히는 TargetFile 이라는 대상 파일을 가리키는 연결입니다. 왜냐? 파일 시스템 작업은 단순히 파일명을 바꾸는 작업만을 하며, 입력되는 파일이 뭐고, 변경하는 파일이 뭔지에 대해서는 관여를 하지 않습니다. 그냥 주는~대로(=입력되는 대로) 수행만 하며, 주는 놈(입력을 시키는 놈)이 연결 관리자의 연결 들인 것이지요. (데이터 어댑터 라고도 하지요~^^)

 

, 그럼 연결 관리자의 TargetFile을 선택한 후, 오른쪽의 속성 창을 봅시다.

ConnectionStringD:\Test_yyyymmdd.txt 라고 되어 있네요.. ..그럼 이 놈을 매일매일 변경되도록 하면 되겠네요.

어디서? Expressions라는 부분에서 합니다. 이 놈이 DTS에서는 동적 속성 작업과 같은 역할을 하는 놈입니다. SSIS에서는 별도의 작업으로 분리된 것이 아니라 이와 같이 모든 개체(작업, 연결, 변환 등)에 다 있는 놈입니다.

Expressions 옆의 버튼을 클릭하여 속성 식 편집기를 띄운 후, 원하는 속성(지정할 속성)을 선택합니다. 여기서는 ConnectionString을 지정할 것이기 때문에 ConnectionString을 선택하고 오른쪽의 식 부분에서 을 클릭합니다.

식 작성기가 나타나며, 여기에다가 식을 지정합니다. 어떤 식으로?

여러 형태의 식이 될 수 있겠지만 저는 다음과 같이 작성했습니다. (D:\ 대신 D:\\ 인 것을 주의~!)

"D:\\Test_" + REPLACE(SUBSTRING((DT_STR, 50, 949)GETDATE(), 1, 10),"-","") + ".txt"

그러고선 식 계산(V)을 한 번 눌러보면

              D:\Test_20070110.txt

이렇게 나오네요.. 오케~. 확인을 누르고 패키지를 실행시켜 봅니다.

 

<실행 전>

<실행 후>

 

 

 

[스크립트 작업을 이용하는 방법]

 

앞의 방법보다는 훨씬 간단합니다. VB.NET 스크립트를 이용하면..^^

하지만, 왠지 기분이 VB.NET을 쓰면 반칙인 것 같다는 느낌이.ㅎㅎㅎ

 

그래도 뭐.. 누가 모라겠습니까.. 간단히 & 단순히 & 쉽게 구현하는게 가장 최선이니깐..

 

도구상자에서 스크립트 작업을 추가한 후, 다음과 같은 스크립트를 이용합니다.

Imports System

Imports System.Data

Imports System.Math

Imports Microsoft.SqlServer.Dts.Runtime

Imports System.IO

 

Public Class ScriptMain

 

 

             Public Sub Main()

 

        Dim sourceFileName As String

        Dim targetFileName As String

 

        sourceFileName = "D:\test.txt"  ' 변수에서 파일명을 받아와도 되겠지요?

        targetFileName = "D:\test_" & Today.ToShortDateString.Replace("-", "") & ".txt"

 

        If File.Exists(sourceFileName) Then '원본 파일이 있는지 확인

            If File.Exists(targetFileName) Then '만약 대상 파일이 있다면?

                File.Delete(targetFileName) '이미 존재하는 파일은 삭제

            End If

            File.Move(sourceFileName, targetFileName) ' 파일 이동이 결국은 파일명 변경

 

        End If

 

        Dts.TaskResult = Dts.Results.Success

             End Sub

 

End Class

 

 

그럼

 

 

 

http://www.sqlleader.com 발췌