● 임시 테이블 이란?
- 이름처럼 임시로 잠깐 사용되는 테이블
- 테이블을 생성할 때 테이블 이름 앞에 '#' 또는 '##'을 붙이면 임시 테이블로 생성된다.
- '#'을 앞에 붙인 테이블은 '로컬 임시 테이블' 이라고 부르는데, 이는 테이블을 생성한 사람만 사용할 수 있다. 즉, 다른 사용자는 해당 테이블이 있는지조차 모른다.
- '##'을 앞에 붙인 테이블은 '전역 임시 테이블' 이라고 부르는데, 이는 모든 사용자가 사용할 수 있는 테이블이다.
● 임시 테이블이 삭제되는 시점
- 사용자가 DROP TABLE로 직접 삭제
- SQL Server가 재시작 되면 삭제
- 로컬 임시 테이블(#)은 생성한 사용자의 연결이 끊기면 삭제됨(즉, 쿼리 창이 닫히면 삭제됨)
- 전역 임시 테이블(##)은 생성한 사용자의 연결이 끊기고 이 테이블을 사용 중인 사용자가 없을때 삭제됨
-- (쿼리 창1) 로컬 임시테이블(#)과 전역 임시 테이블(##)을 생성
USE tableDB;
CREATE TABLE #tempTbl (ID INT, txt NVARCHAR(10));
GO
CREATE TABLE ##tempTbl (ID INT, txt NVARCHAR(10));
-- (쿼리 창1) 데이터를 입력
INSERT INTO #tempTbl VALUES(1, N'지역임시테이블');
INSERT INTO ##tempTbl VALUES(2, N'전역임시테이블');
GO
-- (쿼리 창1) 테이블을 조회
SELECT * FROM #tempTbl;
SELECT * FROM ##tempTbl;
-- (쿼리 창1) 임시 테이블은 어느 데이터베이스에서도 똑같이 조회 가능
USE master;
SELECT * FROM #tempTbl;
SELECT * FROM ##tempTbl;
-- (쿼리 창2) 전역 임시 테이블 조회
SELECT * FROM ##tempTbl; -- 조회 가능
-- (쿼리 창2) 지역 임시 테이블 조회
SELECT * FROM #tempTbl;
----------------------------------------------
메시지 208, 수준 16, 상태 0, 줄 5
개체 이름 '#tempTbl'이(가) 유효하지 않습니다.
완료 시간: 2021-08-17T11:22:07.9759504+09:00
----------------------------------------------
-- (쿼리 창2) 전역 임시 테이블 조회
SELECT * FROM ##tempTbl; -- 조회 가능
-- (쿼리 창2) 지역 임시 테이블 조회
SELECT * FROM #tempTbl;
-- (쿼리 창2) 전역 임시 테이블을 계속 사용중으로 설정하는 작업
BEGIN TRAN
INSERT INTO ##tempTbl VALUES (2, N'새 쿼리창에서 입력');
-- 위에 사용했던 쿼리 창1을 닫는다
-- (쿼리 창2) 전역 임시 테이블 조회
SELECT * FROM ##tempTbl; -- 생성했던 쿼리 창1이 닫혔지만 전역임시테이블을 사용 중이므로 아직 조회가능
-- (쿼리 창2) 트랜잭션을 커밋하고, 다시 조회
COMMIT TRAN;
SELECT * FROM ##tempTbl;
----------------------------------------------
메시지 208, 수준 16, 상태 0, 줄 5
개체 이름 '##tempTbl'이(가) 유효하지 않습니다.
완료 시간: 2021-08-17T11:22:07.9759504+09:00
----------------------------------------------
- 이처럼 전역 임시 테이블도 더 이상 사용하는 사용자가 없고, 기존의 생성했던 세션(쿼리 창1)도 이미 닫혔으므로 자동삭제된다.
'프로그래밍 > Database' 카테고리의 다른 글
[Database] 트랜잭션의 예시 (0) | 2021.08.17 |
---|---|
[Database] 스키마(Schema) (0) | 2021.08.17 |
[Database] 스파스 열 (0) | 2021.08.17 |
[Database] 조인(JOIN) (0) | 2021.08.11 |
[Database] 트리거의 기본용도 (0) | 2021.07.27 |