본문 바로가기

데이터베이스

임시 테이블 Temporary Tables

임시 테이블은 말그대로 임시적으로 존재하는 테이블이다. 

금방 만들어져서 여러번 사용되는 결과집합의 저장에 유용하다.

 

# 임시 테이블을 만들기

 

아래 두 가지 방식으로 임시테이블을 만들 수 있다. 

1. selet into 문

    select 컬럼1

          , 컬럼2

          ............

          , 컬럼N

    into #임시테이블명 -- 임시 테이블명은 해쉬태그(#)와 함께 시작한다. 

    from 테이블 A -- A테이블에 있는 데이터를 조회하여 임시테이블을 만든다.

    where 테이블.Col = 컬럼값(선택사항) -- A테이블에 특정 데이터를 조회하여 만들때

 

만들어진 임시 테이블은 SQL Server Management Studio를 이용해서 아래 경로에서 찾아 볼 수 있다. 

임시 테이블 생성 위치

위 임시 테이블을 보면 00000~으로 시작하는 숫자가 Postfix로 테이블명에 붙어 있는 걸 볼 수있다. 이 임시테이블을 위한 Unique identifier(식별자)는 왜 생길까? 여러 데이터베이스 연결에서 임시 테이블 같은 이름으로 만들 수 있어 Sql Server가 이 Unique한 숫자를 임시 테이블의 끝에 붙여서 중복된 이름에 임시 테이블들을 구분할 수 있게한다. 

2. create table 

Create Table #임시 테이블명 -- #을 꼭 테이블명 앞에 붙여 준다. 나머지는 일반적인 테이블을 만드는 Syntax와 동일.

(

    컬럼 A,

    컬럼 B

    .............

); 

 

임시 테이블을 만들고 난 후, 이 테이블에 insert를 할 수 있다. 


insert into #temp_trade_list ( TRADE_DT)
values('2020-06-01');

 

select * from #temp_trade_list;

Insert 결과

만약, 다른 Database connection을 맺고 임시 테이블에 대한 쿼리를 하면 에러가 발생한다.   

동일 데이터베이스지만 다른 연결 혹은 다른 데이터베이스 연결하면 아래와 같은 메시지를 만난다. 

 

메시지 208, 수준 16, 상태 0, 줄 1
개체 이름 '#temp_trade_list'이(가) 유효하지 않습니다.

 

왜냐면 임시 테이블은 그것을 만든 세션에서 접근이 유효하기 때문이다. 

 

그리고 Session이 끝나고 나면 만들었던 임시 테이블은 사라진다. 

재접속 후 사라진 임시 테이블

# Global 임시 테이블 

위의 문제와 상관 없이 여러 DB 연결에서 접근 가능한 임시 테이블에 접근하고 싶다. Global 임시 테이블을 만들어야 한다.

Global 임시 테이블

select *
into ##temp_trade_list  -- ##을 두 번 붙인다.
from TRADE_LIST;

 

# 임시 테이블 삭제

연결이 끝어지면 이 테이블은 자동 삭제가 된다. Global 임시 테이블은 이 테이블을 만든 연결세션이 종료되고 또

이 테이블에 쿼리하는 다른 연결들도 종료되면 자동 삭제된다. 

 

직접 삭제를 원한다면, 일반 테이블을 삭제하듯 아래 명령을 입력하면 된다. 

 

drop table ##임시 테이블명

 

 

'데이터베이스' 카테고리의 다른 글

Cross Apply와 Outer Apply 차이  (0) 2020.06.12
테이블 변수(SQL Server Table Variables)  (0) 2020.06.11
SQL Server TRY CATCH  (0) 2020.06.09
Merge  (0) 2020.06.08
Multi-statement table-valued functions in Sql Server  (0) 2020.06.06