동적 대상 설정하기
한대성
MS SQL Server MVP
에이디컨설팅 책임 컨설턴트 | SQLLeader.com 운영자
Question |
mysql 자료를 mssql로 이전하는 작업을 하려고 합니다... 데이터 흐름에서 odbc 원본(mysql) | ole db 대상
이런식으로 했을때 대상을 테이블로 지정하면 이상없이 넘어오는데 대상을 sql 쿼리문으로 (날짜를 동적으로 하려고^^) 했을때 에러가 나더군요 대상을 동적으로 처리할때는 어떤식으로 해야하나요 동적내용을 저장프로시져로 해도 안되고 대상에 대한 설정이 궁금합니다... --쿼리문-- declare @tdate char(10) set @tdate = left(convert(char(10),dateadd(mm,-1,getdate()),112),6) SET @Tsql = 'SELECT a,b from test' + @tdate |
변수에 테이블 이름을 설정하고선, 대상 테이블 이름에 이 변수값을 이용하도록 설정하면 됩니다.
[방법 1 : 식(Expression)을 이용]
1. String 형 변수를 하나 추가합니다.
2. 변수를 선택한 후, 속성 부분의 Expression 항목에 있는 … 버튼을 클릭합니다.
(참고 : 서비스 팩 2 이전에는 이 버튼이 없습니다. 서비스 팩 2를 설치하지 않으셨다면 설치하시기 바랍니다.)
3. 식 작성기에서 다음과 같이 식을 작성합니다.
식 : "[tempdb].[dbo].[test" + REPLACE(SUBSTRING((DT_WSTR, 30) DATEADD( "MM", -1, GETDATE()), 1, 7), "-","") + "]"
4. 확인을 눌러서 식 작성기를 닫은 후, 다시 속성 부분에서 아래와 같이 EvaluateAsExpression 속성 값을 True로 설정합니다.
5. 데이터 흐름 영역의 OLE DB 대상의 대상 편집기에서
데이터 액세스 모드(A)를 “테이블 이름 또는 뷰 이름 변수” 또는 “테이블 이름 또는 뷰 이름 변수 – 빠른 로드”로 선택하고, 변수 이름 부분에 위에서 설정한 변수 명을 선택합니다.
5. 매핑 탭에서 열 매핑을 설정하고 확인을 누르시면 됩니다.
[방법 2 : SQL 실행 작업을 이용하는 방법]
1. 방법 1에서와 같이 String 형 변수를 하나 추가합니다. 이 때, 값 부분에 임의의 대상 테이블 이름을 입력하도록 합니다. (이 값은 아래 부분에서 변경될 것이지만, 매핑 설정 단계에서 필요하기 때문에 기본값으로 지정해 줘야 합니다.)
2. SQL 실행 작업을 하나 추가한 후, 임의의 연결을 설정하고, 다음과 같이 설정합니다.
Ÿ SQLStatement
declare @tdate char(6) declare @Tsql varchar(1000) set @tdate = convert(char(6),dateadd(mm,-1,getdate()),112) SELECT '[tempdb].[dbo].[test' + @tdate + ']' as TableName |
Ÿ 결과 집합의 ResultSet : 단일 행
3. 결과 집합 탭에서 추가(A)를 클릭한 후, 결과 이름을 TableName, 변수 이름을 1에서 추가한 [사용자::TargetTable]으로 설정합니다.
4. 이제 SQL 실행 작업을 데이터 흐름 작업과 연결한 후, 방법 1의 5단계에서와 같이 OLE DB 대상 부분에서 대상 테이블을 변수로 설정합니다.
[방법 2]는 복잡한 식을 사용하지 않고 SQL 쿼리를 이용해서 변수에 값을 설정하는 방식이며, 경우에 따라서는 SSIS의 식(Expression)을 이용하는 것 보다 편리할 수 있습니다.
관련 글 : Re) SSIS에서 개체전송 작업시 원본 테이블설정
안녕하세요. 답변이 늦었네요.
우선 간략히 말씀드리자면, SQL Server 개체 전송 작업에 대상 테이블을 지정할 수는 없습니다.
일별로 생성되는 테이블을 이관하고자 한다면, 데이터 흐름 작업을 이용하시기 바랍니다.
데이터 흐름 작업의 데이터 흐름 원본 부분에서 변수를 이용한 원본 지정 등을 이용해서 동적으로 설정할 수 있습니다.
다음 글은 대상 부분에 일별로 테이블을 만드는 것인데 이를 참고해서 원본에도 적용하시면 될 것 같네요.
http://www.sqlleader.com/mboard.asp?exec=view&strBoardID=SS2005SSIS&intSeq=1485
작성자 : 김범준 , 등록일 : 2008-07-01 오후 12:19:00 |
강좌를 보면서 혼자하다가 안되서 질문에 올려봅니다. 도움 부탁드립니다. SSIS에서 개체 전송작업 패키지를 만들고 있습니다. 원본DB에서 TB_Log_20080701 과 같은 매일 새로 생성되는 테이블을 타겟DB로 전송하는 작업입니다. 그래서 아래와 같은 수식을 사용하고 싶은데, 안되네요.. 수식을 어떻게 작성해야 해당하는 날짜 테이블만 전송하도록 만들수 있을까요.. |
'연구개발 > DTS & SSIS' 카테고리의 다른 글
패키지 외부에서 데이터 원본 및 대상 설정하기 (0) | 2011.08.27 |
---|---|
루핑 처리 방법 (0) | 2011.08.27 |
스크립트 변환을 이용한 RowNumber 및 파생열 만들기 (0) | 2011.08.27 |
잠긴 파일 처리 (0) | 2011.08.27 |
스크립트 변환으로 RowNumber 구현하기 (0) | 2011.08.27 |