[MSSQL] 임시테이블 생성 및 관리, TEMP TABLE
가장 먼저 임시테이블을 사용하는 목적을 알아야 한다. 필자는 다음과 같은 경우일 때 사용하기를 권장한다.
-
여러 단계를 거쳐 동일한 데이터에 반복작업을 해결할 때
-
복잡한 쿼리를 단순화 시킬때
-
서버상의 커서(Cursor) 사용으로 인한 부하를 줄이고자 할 때
생성 방법
임시테이블의 생성 방법은 일반 테이블 생성 방법과 동일하다. CREATE TABLE ... 또는 SELECT INTO ... 구문을 사용하면 된다. 차이점이 있다면 테이블 명칭 앞에 # 이나 ## 을 붙이고 데이터가 TEMPDB에 저장 된다는 것이다. 그리고 임시테이블에는 전역형과 지역형 임시테이블이 존재한다.
지역형 임시 테이블 특징
1. # 문자로 시작하고 본래 테이블 명칭을 사용한다. (#TABLE_NAME)
2. 엄청나게 많은 밑줄, 접미사
3. 12자리에 시스템에서 생성한 숫자, 접미사
위 3가지로 총 128자를 구성하게 된다. (SQL Server에서 OBJECT_NAME은 최대 128자로 제한) 위 같은 특징 때문에 실제 # 문자를 포함해서 최대 116자 까지만 작성이 가능하다.
지역형 임시 테이블 선언
CREATE TABLE [dbo].[#TABLE_NAME]
(
COLUMN_NAME VARCHAR(4),
COLUMN_NAME2 INT,
...
...
);
전역형 임시 테이블 특징
1. ## 문자로 시작한다.
2. 동일한 이름의 임시 테이블을 가질 수 없다.
-> 전역 임시 테이블은 다른 접미사가 붙지 않는다. 따라서 CREATE 전에 동일한 이름이 존재해서는 안되며 동일한 이름을 가진 테이블을 두 개 이상 만들 수 없다. (매우 당연한 말이지만 임시 테이블 사용시 놓치기 쉬운 부분)
3. 참조 범위는 모든 세션에서 참조가 가능하도록 설계 되어 있다. (GLOBAL)
4. 소멸 시점은 임시 테이블을 생성한 세션이 닫혀야 될 뿐 아니라, 다른 프로세스에서 참조하는 것도 해제되어야 한다. (여러 세션들이 동시에 사용하게 되면 생성 시점 또는 소멸 시점을 맞추기 곤란한 경우가 간혹 있다.)
전역형 임시 테이블 선언
CREATE TABLE [dbo].[##TABLE_NAME]
(
COLUMN_NAME VARCHAR(4),
COLUMN_NAME2 INT,
...
...
);