게임 서버를 만들고 있습니다IDC 의 로그DB 에 데이타를 사내의 로컬 DB 데이타를 가져오려합니다
IDC 의 테이블은 그냥 TestTable 이라면 로컬 DB 의 테이블명은 분기별로 구분을 하려합니다 (TestTable_2007_1 : 2007년 1분기 테이블)
그래서 IDC 의 중복되지 않는 년, 월 의 데이타를 커서에 넣어서 처리를 하려합니다
그런다음에 커서의 데이타를 몇분기인지 구해서 해당되는 분기테이블을 만들고(없을경우에만)
해당 분기테이블에 데이타를 백업해오려합니다
근데 루프안에서 테이블명(해당 분기)을 구해서 그 테이블에 데이타를 넣으려 하니 에러가 나더군요
insert into @VARTEMPLOCALTABLENAME <== 이부분
다른 여러가지 방법을 써봐도 안됩니다...
혹시 다른 방법이 없을까요?
(10분마다 호출되는 SP 이므로 속도는 크게 상관없습니다)
그리고 이 렇게 외부의 DB의 데이타를 처리할떄 분산 트랜젝션을 사용하는건가요?
(분산 트랜젝션을 하려니까 에러가 나서 이리저리 검색해보니 여러가지 설정을 해야하던데요)
-- 해당데이타의 모든 년, 달을 구해서 커서에 넣은다음에 커서에서 데이타를 백업해온다음에 IDC 의 데이타는 삭제한다
-- 테이타중에 틀린 달 이 있을때마다 루프를 돌므로 많은 부하가 가지않는다
set @VARSQL = N'
declare @VARYEAR int
declare @VARMONTH int
declare @VARQUARTER int
declare @VARTEMPLOCALTABLENAME nvarchar(256)
declare tempCursor CURSOR FOR select distinct Year(logDate) as year, Month(logDate) as month from TestTable
open tempCursor
FETCH NEXT FROM tempCursor into @VARYEAR, @VARMONTH
WHILE @@FETCH_STATUS = 0
BEGIN
-- spCreateTable 를 호출하여 해당 테이블을 생성한다 , 해당 테이블이 없을때만 (분기별로 생성)
if @VARMONTH >= 1 and @VARMONTH <= 3 -- 1분기
set @VARQUARTER = 1
else if @VARMONTH >= 4 and @VARMONTH <= 6 -- 2분기
set @VARQUARTER = 2
else if @VARMONTH >= 7 and @VARMONTH <= 9 -- 3분기
set @VARQUARTER = 3
else if @VARMONTH >= 10 and @VARMONTH <= 12 -- 4분기
set @VARQUARTER = 4
declare @VARRESULT int
exec spCreateTable @VARYEAR, @VARQUARTER
-- 테이블명 수정 (Local 테이블명, [테이블명_년_분기])
set @VARTEMPLOCALTABLENAME = ''TestTable'' + ''_'' + convert(nvarchar(40), @VARYEAR) + ''_'' + convert(nvarchar(40), @VARQUARTER)
-- IDC 의 데이타 로컬로 가져오기
insert into @VARTEMPLOCALTABLENAME
select * from TestTable
and Year(logDate) = @VARYEAR
and Month(logDate) = @VARMONTH
FETCH NEXT FROM tempCursor into @VARYEAR, @VARMONTH
END
CLOSE tempCursor
DEALLOCATE tempCursor
'
exec sp_executesql @VARSQL |