MSSQL

[MSSQL] 임시테이블 생성 여부 확인 및 제거

csmkong 2024. 6. 3. 17:55

SSMS에서 임시테이블을 사용하여 데이터를 확인하는 쿼리를 사용하다보면,

임시테이블을 제거(DROP)하고 다시 생성해서 사용해야하는 경우가 있다.

 

쿼리의 마지막 라인에 사용한 임시테이블을 제거(DROP)하는 방법으로 쿼리 작성도 가능하지만

실행 시 임시테이블이 있는지 확인하고 있다면 지우고 다시 생성하도록 하는 방법도 있다.

 

    SELECT *
      INTO #TEMP_TT
      FROM (
            SELECT 'A' AS T UNION ALL
            SELECT 'B' AS T UNION ALL
            SELECT 'C' AS T
           ) A

    SELECT *
      FROM #TEMP_TT

<임시테이블에 데이터를 입력하고 입력된 데이터를 확인하는 쿼리>

위 쿼리를 처음 실행하면 아래와 같이 정상적으로 실행된다.

정상실행 화면

 

위 쿼리를 다시한번 실행하면 아래와 같은 오류가 발생한다.

MSSQL ERROR MESSAGE - 메시지 2714, 수준 16, 상태 6, 줄 2 데이터베이스에 '#TEMP_TT'(이)라는 개체가 이미 있습니다.

 

쿼리 상단에 아래와 같은 코드를 넣어주면, 쿼리 실행 시 임시테이블의 존재 여부를 확인하고 

임시테이블이 있다면 제거 후 쿼리를 실행하게 된다.

* #이 2개 붙어있는 전역 임시테이블에 사용할 때는 다른 SESSION에서 사용되고 있을 수 있으니 주의해야한다.

    IF OBJECT_ID('TEMPDB..#TEMP_TT') IS NOT NULL
    BEGIN
        DROP TABLE #TEMP_TT
        PRINT 'DROP TABLE #TEMP_TT.'
    END
    ELSE
    BEGIN
        PRINT '#TEMP_TT IS NOT EXISTS.'
    END

    SELECT *
      INTO #TEMP_TT
      FROM (
            SELECT 'A' AS T UNION ALL
            SELECT 'B' AS T UNION ALL
            SELECT 'C' AS T
           ) A

    SELECT *
      FROM #TEMP_TT

임시테이블이 있다면 제거 후 쿼리를 실행할 수 있도록 조건문 추가.

 

위 쿼리를 실행하면 아래와 같이 임시테이블 존재 여부에 따라 메시지가 표시되며, 정상 실행된다.

임시테이블 확인 후 제거
정상실행