반응형

패키지 실행 시 매개변수 동적으로 주기

Microsoft Premier Field Engineer

한대성

 

 

 Question
job agent에서 패키지(SSIS)를 호출하여 매일 실행시키는 작업을 추가하였습니다.
근데 SSIS에서 매개변수를 받는것이 있거든요.
그 매개변수는 매일 실행하는 월.일(20090817, 200908) 입니다.
이런 매개변수값을 agent등록시 어떻게 지정하여 넣어주어야 하나요?
값 넣는 것은
\package.Variables[User::YYYYYMMDD].Value : 임의의값
이란 것을 알고 있지만 임의의 값이 아닌 동적인 값을 넘기고 싶습니다.


1. SSIS 패키지 내에서 날짜에 대한 값 지정하기

일반적인 방법으로, 입력되는 날짜가 없는 경우에는 자동으로 오늘 날짜 및 이번 달을 지정하도록 만드는 것입니다.

a.     스크립트 작업을 패키지의 가장 처음에 실행될 수 있도록 추가합니다.

b.     스크립트 작업의 ReadWriteVariables User::YYYYMMDD,User:YYYYMM 변수를 입력합니다.

 

c.     다음과 같은 스크립트를 입력합니다. (Main() 안에)

public void Main()

        {

 

            if (Dts.Variables["YYYYMMDD"].Value.ToString() == "")

            {

                Dts.Variables["YYYYMMDD"].Value = DateTime.Today.ToString("yyyyMMdd");

                Dts.Variables["YYYYMM"].Value = DateTime.Today.ToString("yyyyMM");

            }

            Dts.TaskResult = (int)ScriptResults.Success;

        }


 

d.     간단히 각 변수의 값을 출력하는 작업을 하나 추가하고 패키지를 테스트 하면 다음과 같이 오늘 날짜 및 이번 달이 변수 값으로 지정됩니다.

 

e.      SQL Agent에서는 오늘 날짜로 설정할 경우에는 \package.Variables[User::YYYYMMDD].Value의 속성에 빈 값을 넣으면 됩니다.

 

 

2. Shell Script를 이용하여 날짜 값 지정

만약 패키지를 수정할 수 없는 경우에는 다음과 같은 방식을 이용합니다.

a.     SQL Agent에서 실행할 패키지를 지정하고, YYYYMMDD, YYYYMM 변수에 임의의 값을 지정한 후, 명령줄 탭에 나오는 명령줄 부분을 복사합니다.

         

b.     메모장에 위의 명령을 붙여 넣은 다음, 아래와 같이 날짜 정보를 얻어오는 Shell Script를 추가한 후 확장자를 cmd로 저장합니다.

echo off

 

REM Define the TODAY variable

REM Define the THISMONTH variable

 

REM 운영체제가 한글 버전인 경우

for /F "tokens=1-3 delims=/ " %%a in ('date /t') do SET TODAY=%%a%%b%%c

for /F "tokens=1-3 delims=/ " %%a in ('date /t') do SET THISMONTH=%%a%%b

 

REM 운영체제가 영문 버전인 경우 아래의 REM 제거

REM for /F "tokens=1-3 delims=/ " %%a in ('date /t') do SET TODAY=%%c%%a%%b

REM for /F "tokens=1-3 delims=/ " %%a in ('date /t') do SET THISMONTH=%%c%%a%

 

"D:\Program Files\Microsoft SQL Server\100\DTS\Binn\dtexec.exe" /FILE "D:\Temp\SSISProject\SSISProject\Package.dtsx" /CHECKPOINTING OFF /SET "\package.Variables[User::YYYYMMDD].Value";%TODAY% /SET "\package.Variables[User::YYYYMM].Value";%THISMONTH% /REPORTING E


주의할 것은 날짜를 가져오는 부분이 OS의 국가별 언어 설정에서 지정한 날짜 방식에 따라 약간 다릅니다. 만약 운영체제가 영문일 경우, 영문 버전에 맞게 수정하세요.

그리고, 가급적 패키지를 실행시키는 dtexec.exe는 전체 경로를 명확히 지정해 주세요. SQL 2005가 같이 설치되어 있을 경우, 단순히 dtexec.exe로 지정하면 SQL 2005 버전이 실행될 수도 있습니다.

 

c. 패키지를 테이블에 저장하도록 약간 수정한 후 테스트 해 보면 다음과 같이 정확히 날짜가 입력됩니다.

 



 


 

d.     다시 SQL Agent 작업으로 돌아가서, 작업 유형을 운영 체제(CmdExec)로 변경한 후, 아래와 같이 명령 부분에 위에서 생성한 파일을 지정합니다.


          

--

반응형

+ Recent posts