임시 테이블은 말그대로 임시적으로 존재하는 테이블이다.
금방 만들어져서 여러번 사용되는 결과집합의 저장에 유용하다.
# 임시 테이블을 만들기
아래 두 가지 방식으로 임시테이블을 만들 수 있다.
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;
만약, 다른 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 |