오늘 날짜에 추가된 파일만 복사해 오기
한대성 MS SQL Server MVP 에이디컨설팅 | SQLLeader.com 운영자
![]() |
안녕하세요 ^^
전에 질문했던 내용에 답변 해주신 내용 많은 도움이 되었습니다.
감사 합니다.
------질문-------
1일 1번 지정된 폴더의 기존 있던 파일이 아닌 그날 생성된 파일을 전송 하고자 합니다.
FTP 전송 이나 파일전송을 이용 하면 될거 같은데..
문제는 새로 생성된 파일만 알아야 한다는 문제점이 있습니다.
이런 경우 어떤 방법으로 해야 효율적일지 해서 질문을 올리게 되었습니다.
그럼 수고 하세용 ^^a
|
안녕하세요^^
여러 방법 중에 다음과 같은 형태로 설명 드리겠습니다.
우선 파일 정보를 한 번 보겠습니다.
여기서의 만든 날짜는 파일이 생성된 날짜가 아니고, 해당 디렉터리에 파일이 만들어진 날짜입니다. 외부에서 이 디렉터리(D:\Temp)에 복사해 온 날짜이거나, 만약 이 파일이 이 디렉터리에서 새로 만들어진 경우라면 파일의 생성 날짜가 되겠지요.
이 정보를 이용하면 될 것 같습니다.
a. Foreach 루프 컨테이너로 가지고 올 파일의 경로에 있는 모든 파일 이름을 읽어오도록 설정하고,
b. 가지고 온 파일 명을 이용하여, 어떠한 방법을 이용하여 파일의 만든 날짜를 얻은 후,
c. 만든 날짜가 오늘인 경우에만 파일을 복사해 오도록 구현
하면 될 듯 합니다.
Foreach 루프 설정은 간단한데, b번의 어떠한 방법은? SSIS의 기본 작업 개체로는 없습니다. 대신, 간단히 스크립트 작업을 이용하도록 합시다.
그런 후, 파일의 날짜를 얻은 후 c와 같이 판단을 하려면? 날짜를 변수에 저장시키고, 선행 제약 조건의 조건 식을 이용하여 오늘 날짜인지를 판별하여 조건이 맞은 경우에만 진행하면 될 것 같습니다.
1. 다음과 같이 Foreach 루프 컨테이너를 추가한 후, Foreach File 열거자를 선택하고(기본적으로 선택되어 있을 것입니다.), 폴더(F)를 C:\Windows로 정하고, 파일(I)을 *.bmp 로 변경합니다.
변수 매핑 탭에서 파일 이름을 저장할 변수를 설정합니다. 변수가 없는 경우에는 String형으로 하나 추가해 줍니다.
이제, C:\Windows 폴더 내에 있는 bmp 파일들의 이름을 차례대로 읽어서 FileName 변수에 저장하도록 설정은 되었습니다.
2. FileCreateDate라는 String 형 변수를 하나 더 추가합니다. 이 때 범위는 Foreach 루프 컨테이너만으로 한정되어도 상관없습니다.(전역 변수라도 상관 없습니다.)
3. Foreach 루프 컨테이너 안에 스크립트 작업을 하나 추가한 후, ReadOnlyVariables에는 FileName, ReadWriteVariables에는 FileCreateDate 변수를 설정합니다.
그런 다음, 스크립트 디자인(S)를 눌러 VSA를 열고선 다음과 같은 스크립트를 입력합니다.
Imports System Imports System.Data Imports System.Math Imports System.IO Imports Microsoft.SqlServer.Dts.Runtime
Public Class ScriptMain
Public Sub Main()
Dim FileName As String = Dts.Variables("FileName").Value.ToString If File.Exists(FileName) Then Dts.Variables("FileCreateDate").Value = _ File.GetCreationTime(FileName).Date.ToString.Substring(0,10) End If
Dts.TaskResult = Dts.Results.Success End Sub
End Class |
스크립트는 대충~ 아시겠지요? 파일 있으면 파일의 날짜 읽어서 변수에 이 날짜를 입력하라는 것입니다.
4. 이제, 파일 시스템 작업을 추가하고, 스크립트 작업과 연결합니다. 파일 시스템 작업의 설정은 다음과 같이 FileName 변수를 이용해서 파일을 복사해 오도록 설정하고, 대상 위치는 필요한 곳으로 정합니다.
그런데, 여기서 잠깐..!!
설정을 마쳤는데도, 빨간 경고가 뜨네요. FileName이라는 변수에 값이 없어서 그렇다라는 것인데, 이것은 유효성 검사로 인해서 나타나는 것입니다.
파일 시스템 작업을 선택하고선, 속성 창을 보면 DelayValidation 옵션이 있습니다. 이 값을 False에서 True로 변경합니다. 이 속성에 대해서는 다음 링크의 글을 참고하세요.
5. 스크립트 작업과 파일 시스템 작업 간의 연결선인 선행 제약 조건을 더블 클릭한 후, 다음과 같은 식을 추가합니다.
평가 작업(E)을 식 및 제약 조건으로 변경하고, 식(X) 부분에 다음과 같은 조건식을 입력합니다.
@FileCreateDate == SUBSTRING((DT_STR, 32, 949)GETDATE(), 1, 10)
자, 설정이 끝났습니다. 임의로 C:\Windows 폴더에 오늘 날짜로 bmp 파일을 생성시킨 후, 패키지를 테스트 해 봅시다.
본 게시판에 실린 글은 누구나 복사하셔서 이용하셔도 되지만, 반드시 출처(SQLLeader.com) 및 글의 링크를 밝혀주셔야 합니다.
'연구개발 > DTS & SSIS' 카테고리의 다른 글
부모 패키지에서 자식 패키지 변수값 읽어오기 (0) | 2011.08.27 |
---|---|
SQL 2005 Agent 작업에서 프록시 설정하기 (0) | 2011.08.27 |
T-SQL과 JET-SQL 쿼리 비교 (0) | 2011.08.27 |
엑셀 파일과 테이블 데이터 동기화하기 (0) | 2011.08.27 |
외부에서 패키지 값 속성 설정하기 (0) | 2011.08.27 |