http://egloos.zum.com/sweeper/v/3008903
1. 임시 테이블
임시 테이블은 이름처럼 임시로 잠깐 사용되는 테이블이다.
임시 테이블을 만드는 방법엔 두 가지가 존재한다.
- 사용 데이터베이스를 tempdb로 잡고 테이블을 생성하는 방법
- CREATE TABLE시 table_name 앞에 #이나 ##을 붙이는 방법
위 두가지 방법은 모두 tempdb에 테이블을 생성한다.
#을 테이블 이름 앞에 붙이면 이 테이블은 "로컬 임시 테이블"이 된다.
이 테이블은 생성한 사람만 사용할 수 있다.
##을 테이블 이름 앞에 붙이면 이 테이블은 "전역 임시 테이블"이 되며,
모든 사용자가 사용할 수 있다.
임시 테이블이 삭제되는 시점은 아래와 같다.
- DROP TABLE로 명시적으로 삭제
- SQLServer가 재시작 될 때 (tempdb에 들어 있으므로 당연하다)
- 로컬 임시 테이블의 경우, 생성한 사용자의 연결이 끊기면 삭제된다.
- 전역 임시 테이블의 경우, 이 테이블을 사용하는 사용자의 연결이 모두 끊기면 삭제된다.
2. 임시 테이블 실습
1) 쿼리창1 을 열고, 아래와 같이 로컬/전역 임시 테이블을 생성시켜 보자.
- CREATE TABLE #LocalTempTable
- (
- ID INT,
- Name NVARCHAR(16)
- )
- GO
- CREATE TABLE ##GlobalTempTable
- (
- ID INT,
- Name NVARCHAR(16)
- )
- GO
2) 쿼리창1 에서 두 테이블에 데이터를 삽입시켜 보자.
- INSERT INTO #LocalTempTable VALUES (1, N'로컬임시테이블')
- INSERT INTO #LocalTempTable VALUES (2, N'전역임시테이블')
3) 쿼리창1 에서 두 테이블의 데이터를 조회해 보자.
- SELECT * FROM #LocalTempTable
- SELECT * FROM ##GlobalTempTable
4) 쿼리창2 를 열고, 두 테이블을 조회해 보자.
- SELECT * FROM #LocalTempTable
- 메시지 208, 수준 16, 상태 0, 줄 1
- 개체 이름 '#LocalTempTable'이(가) 잘못되었습니다.
- SELECT * FROM ##GlobalTempTable
로컬 임시 테이블은 해당 세션(쿼리창1)에서만 유효하므로, 쿼리창2 에서는 인식이 되지 않는다.
5) 쿼리창1 과 쿼리창2 를 닫고, 쿼리창3 에서 두 테이블을 조회해 보자.
- SELECT * FROM #LocalTempTable
- GO
- 메시지 208, 수준 16, 상태 0, 줄 1
- 개체 이름 '#LocalTempTable'이(가) 잘못되었습니다.
- SELECT * FROM ##GlobalTempTable
- GO
- 메시지 208, 수준 16, 상태 0, 줄 1
- 개체 이름 '##GlobalTempTable'이(가) 잘못되었습니다.
로컬 임시 테이블은 당연히 쿼리창1 이 아니기에 조회가 되지 않고,
쿼리창3 을 수행하기 전에 쿼리창1, 쿼리창2 를 모두 닫았기에,
쿼리창1의 세션이 끊겨 로컬 임시 테이블이 삭제되었고,
전역 임시 테이블을 사용하던 세션들(쿼리창1, 쿼리창2)이 모두 끊겨 전역 임시 테이블도 삭제가 되었다.
'Database > MS-SQL' 카테고리의 다른 글
[스크랩] MSSQl 2012 달라진 메모리 구조 (multipage 없어진 것 관련) (0) | 2017.07.20 |
---|---|
[스크랩] OLTP / DW / DM / OLAP 비교 (0) | 2017.07.20 |
[스크랩] SQL SERVER REPLICATION DIFFTOOL (tablediff.exe) (0) | 2017.06.08 |
[스크랩] 823, 824, 825, 832 오류 (DISK IO 오류) (0) | 2017.05.19 |
[스크랩] MSSQL suspect 복구방법 (0) | 2017.05.18 |