테이블 변수 VS 임시 테이블
- 테이블 변수는 '메모리'에 생성되는 것으로, 다른 변수와 마찬가지로 한 번 사용한 후에는 다시 사용할 수 없지만, 임시 테이블은 'tempdb'에 생성되며 연결이 끊기거나 SQL Server가 다시 시작되지 전까지는 계속 남아 있다.
- 작은 데이터를 임시로 사용할 때는 테이블 변수가 유리할 수 있고, 대용량의 데이터를 임시로 사용할 때는 임시 테이블이 더 나을 수 있다.
( 임시 테이블은 일반 테이블이 갖는 모든 성격을 갖게 되므로 대용량의 데이터의 경우 비클러스터형 인덱스를 생성할 수 있으나, 테이블 변수는 불가능 하기 때문이다. )
- 테이블 변수는 명시적 트랜잭션 (BEGIN TRAN … COMMIT/ROLLBACK TRAN) 내부에 있더라도 영향을 받지 않는다.
테이블 변수와 임시테이블의 사용
- 테이블 변수
1 2 3 | DECLARE @tblVar TABLE (id char(8), name nvarchar(10), addr nchar(2)) INSERT INTO @tblVar SELECT userID,name,addr FROM userTbl WHERE birthYear >= 1970 | cs |
- 임시 테이블
1 2 3 | CREATE TABLE #tmpTbl (id char(8), name nvarchar(10),addr nchar(2)) INSERT INTO #tmpTbl SELECT userID,name,addr FROM userTbl WHERE birthYear >= 1970 | cs |
- 결과
테이블 변수의 트랜잭션 사용
1 2 3 4 5 | DECLARE @tblVar TABLE (id INT) BEGIN TRAN INSERT INTO @tblVar VALUES (1),(2) ROLLBACK TRAN SELECT * FROM @tblVar; | cs |
- 결과 : 테이블 변수는 트랜잭션의 영향을 받지 않는다.
참고문헌
우재남, 『뇌를 자극하는 SQL Server 2012』 한빛미디어 (2013-03-02 초판발행)
'DEV LOGS' 카테고리의 다른 글
[MSSQL] DROP TABLE VS TRUNCATE TABLE VS DELETE 문 (0) | 2018.07.17 |
---|---|
[MSSQL] 커서 (1) | 2018.07.10 |
[MSSQL] 스키마 바운드 함수 (0) | 2018.07.10 |
[MSSQL] 사용자 정의 함수의 종류 (0) | 2018.07.10 |
[MSSQL] 사용자 정의 함수 (0) | 2018.07.10 |