MSSQL 임시테이블

개요

MSSQL 임시테이블을 만드는 방법, 만들 때 존재여부 확인 방법, 테이블변수와의 간략한 차이점에 대한 내용입니다.
만드는법은 테이블 이름 앞에 #을 하나 붙이면 임시테이블이 됩니다. #을 두 개 붙이면 전역 임시테이블이 되어서 다른 세션에서도 사용이 가능한데, 이건 거의 사용할 일이 없으니 #하나 붙이는 임시테이블만 알면 됩니다. 혹시 두 개 붙이는 전역 임시테이블이 필요하다면 블로그보다는 MS 문서나 SQL 책을 참조하시는 것이 좋겠습니다.

mssql 임시테이블 생성

-- 기 존재시 drop 처리
IF OBJECT_ID('TEMPDB..#tableName') IS NOT NULL
	DROP TABLE #tableName

-- 만들기
CREATE TABLE #TABLENAME (
COLUMN1 INT
, COLUMN2 INT
, COLUMN3 INT
)

-- 데이터 인서트
INSERT INTO #TABLENAME ( COLUMN1, COLUMN2, COLUMN3 ) 
VALUES ( 1, 2, 3 )

-- SELECT 해보기
SELECT * FROM #TABLENAME
mssql 임시테이블 생성 및 조회결과

위의 쿼리에서 첫번째 블럭은 임시테이블이 존재하는 지를 체크해서, 있다면 지우고 생성하는 쿼리입니다.
모든 코드가 정상적이라면 동일한 세션에 같은 이름의 테이블이 이미 존재하는 경우는 없겠지만, 아닌 경우도 있기때문에, 생성시에 이렇게 체크하는 구문을 넣는 경우도 많고, 특히 디버깅시에 부분적으로 쿼리를 실행하다보면
“메시지 2714, 수준 16, 상태 6, 줄 7
데이터베이스에 ‘#TABLENAME'(이)라는 개체가 이미 있습니다.”
이런 메시지가 나오면서 디버깅이 귀찮아지기때문에 귀찮음 방지용으로도 의미가 있습니다.

또 임시테이블은 세션이 끝나면 tempdb 에서 사라진다고 되어있지만, 보통은 프로시저 끝부분에 drop table 구문을 넣어줍니다. 시작할때 drop 을 넣는 이유랑도 좀 비슷하기도 하고….

임시테이블 사용

임시테이블은 일단 생성해놓으면 사용에서는 일반테이블과 거의 차이가 없습니다. 특히 값을 넣은 상태로 다른 프로시저에 넘겨주면 호출된 프로시저에서도 해당 테이블의 데이터에 접근할 수 있어서 데이터를 주고 받기에 편리합니다. mssql 임시테이블은 자동으로 삭제되는 것을 제외하고는 일반 테이블과 모든게 같다고 생각하고 사용하다가 뭔가 안되는게 있으면 혹시 임시테이블이라 안되나? 이정도로 생각하면 됩니다.

테이블변수와의 비교

테이블변수는 임시테이블과 비슷한 역할을 할 수 있지만, 제한사항이 좀 있습니다. 특히 성능면에서는 차이가 크기때문에, 단순히 변수 값 저장을 위한 용도가 아니라, 다른 테이블과 JOIN 을 하는 경우라면 사용하지 말라고 권장하고 있습니다.

mssql 테이블변수 관련 ms 공식문서 캡쳐

MSSQL 임시테이블 MS 문서 링크
MSSQL 테이블변수 MS 문서 링크

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다