데이터베이스 개발자 질문과 답변 게시판
데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.
안녕하세요.
제가 다음과 같은 SP를 작성하려고 합니다.
CREATE PROC DBO.TEST_PROC
@DATE CHAR(8)
AS
SET NOCOUNT ON
DECLARE @COL1 = 0 INT, @COL2 = 0 INT, @COL3 = 0 VARCHAR(10)
SELECT @COL1 = COL1
FROM DBO.TEST_TBL WITH( NOLOCK)
WHERE STATUS = 1
SELECT @COL2 = COL2
FROM DBO.TEST_TBL WITH( NOLOCK)
WHERE STATUS = 2
SELECT @COL3 = COL3
FROM DBO.TEST_TBL WITH( NOLOCK)
WHERE STATUS = 3
DELETE DBO.TEST_TBL2 WHERE DATE = @DATE
INSERT INTO DBO.TEST_TBL2 (DATE, COL1, COL2, COL3)
VALUES (@DATE, @COL1, @COL2, @COL3)
위와 같이 어떤 테이블의 값을 변수에 담고
그 변수의 값들을 또 다른 테이블에 담는 프로시저를 만들려고 합니다.
위와 같은 상황이 계속 반복될 때
DELETE나 INSERT 구분에 예외처리나 트랜잭션 처리를 해야 할까요
감사합니다.
상황에 따라 다르겠지만 당연히 트랜젹션 처리가 들어 가야 될 것 같습니다.
만약 DELETE하고 INSERT 부분에서 에러가 난다면 삭제만되고 INSERT가 안되는 현상이 나올테니깐요.
그리고 TRY... CATCH 가 만능은 아니지만 왠만한 에러나 예외 상황은 거의 다 잡을 수 있으므로 트랜잭션과 함께 처리 하시면 좋을 것 같습니다.
BEGIN TRY
BEGIN TRAN
...
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
-- 에러 내역 저장
--AdventureWorks에 ErrorLog 테이블 참조
END CATCH