데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
아래내용처럼 일정기간의 날동안의 루프돌며 삭제후 셀렉트인서트를 하는데요. 잘돌기는하는데 데이터 반영이 마지막날짜꺼만 커밋되네요. 뭐가잘못됬을까요?
DECLARE @dates VARCHAR(10)
DECLARE @Todates VARCHAR(10)
DECLARE @CNT INT
DECLARE @CurDates VARCHAR(10)
SET @dates = '20131223';
SET @Todates=CONVERT(VARCHAR,GETDATE(), 112);
SET @CNT = 0;
WHILE (@dates < @Todates)
BEGIN TRY
BEGIN TRANSACTION
SET @CurDates = CONVERT(VARCHAR, DATEADD(DAY,1,@dates), 112);
DELETE FROM tableA WHERE yyyymmdd =@CurDates
INSERT INTO tableA (a,b,c,d ) SELECT a,b,c,d FROM ddd where yyyymmdd=@CurDates
PRINT '###############tableA####'
DELETE FROM tableB WHERE yyyymmdd =@CurDates
INSERT INTO tableB (a,b,c,d ) SELECT a,b,c,d FROM ddd where yyyymmdd=@CurDates
PRINT '###############tableB######'
DELETE FROM tableC WHERE yyyymmdd =@CurDates INSERT INTO tableC (a,b,c,d ) SELECT a,b,c,d FROM ddd where yyyymmdd=@CurDates
PRINT '############### tableC #####'
SET @CNT += 1;
SET @dates = @CurDates;
COMMIT TRANSACTION
END TRY
BEGIN CATCH ROLLBACK TRANSACTION SELECT ERROR_NUMBER() AS [에러 번호] , ERROR_SEVERITY() AS [에러 중요도] , ERROR_STATE() AS [에러 상태] , ERROR_PROCEDURE() AS [에러 프로시져] , ERROR_LINE() AS [에러 발생라인] , ERROR_MESSAGE() AS [에러 발생내용] , GETDATE() AS [에러 발생시간] , @@FETCH_STATUS as [상태] END CATCH
DECLARE @dates VARCHAR(10)
DECLARE @Todates VARCHAR(10)
DECLARE @CNT INT
DECLARE @CurDates VARCHAR(10)
SET @dates = '20131223';
SET @Todates=CONVERT(VARCHAR,GETDATE(), 112);
SET @CNT = 0;
WHILE (@dates < @Todates)
BEGIN TRY
BEGIN TRANSACTION
SET @CurDates = CONVERT(VARCHAR, DATEADD(DAY,1,@dates), 112);
DELETE FROM tableA WHERE yyyymmdd =@CurDates
INSERT INTO tableA (a,b,c,d ) SELECT a,b,c,d FROM ddd where yyyymmdd=@CurDates
PRINT '###############tableA####'
DELETE FROM tableB WHERE yyyymmdd =@CurDates
INSERT INTO tableB (a,b,c,d ) SELECT a,b,c,d FROM ddd where yyyymmdd=@CurDates
PRINT '###############tableB######'
DELETE FROM tableC WHERE yyyymmdd =@CurDates INSERT INTO tableC (a,b,c,d ) SELECT a,b,c,d FROM ddd where yyyymmdd=@CurDates
PRINT '############### tableC #####'
SET @CNT += 1;
SET @dates = @CurDates;
COMMIT TRANSACTION
END TRY
BEGIN CATCH ROLLBACK TRANSACTION SELECT ERROR_NUMBER() AS [에러 번호] , ERROR_SEVERITY() AS [에러 중요도] , ERROR_STATE() AS [에러 상태] , ERROR_PROCEDURE() AS [에러 프로시져] , ERROR_LINE() AS [에러 발생라인] , ERROR_MESSAGE() AS [에러 발생내용] , GETDATE() AS [에러 발생시간] , @@FETCH_STATUS as [상태] END CATCH