변수

변수란 값을 담아두는 것이라고 모두 알고 있으실 겁니다.

우선 간단하게 변수를 생성하고 설정하는 방법을 알아보겠습니다.

--변수 생성
--declare 변수명 타입
DECLARE @name varchar(20)

--변수에 값 할당
SET @name = 'Kendrick'

--혹은
--userid가 sonim1일 때 이름이 Kendrick일 경우  
SELECT @name = P.name FROM tblPerson P WHERE userid = 'sonim1'

SET을 하던 SELECT를 하던 동일한 값이 @name 변수에 할당되는 쿼리입니다.

아래는 @name 변수를 이용해서 이어서 해당 user의 가입일을 알아보겠습니다.

SELECT CreateDate -- 생성일 필드
FROM  tblPerson P
WHERE P.name = @name

이정도면 변수의 사용법은 충분히 이해되실것 입니다.

테이블 변수

이제 알아볼 항목은 테이블 변수입니다.
변수에서는 값뿐이 아니라 여러행으로 떨어지는 결과를 담아 둘 수 있습니다.

예를 보 시죠

--테이블 변수 생성, 자료형 대신에 테이블 스키마가 들어가 있다.
DECLARE @userData TABLE(
     name varchar(30) NOT NULL,
     CreateDate datetime NOT NULL
);

--Insert Into Select 문을 이용하여 k로 시작하는 회원의 리스트를 할당해보자
INSERT INTO @userData
SELECT name, CreateDate 
FROM tblPerson
WHERE name like 'k%'

--할당 후에는 변수를 이용하여 테이블처럼 사용가능하다.
SELECT * FROM @userData

변수와 테이블 변수에 대해서 간단하게 알아보았습니다.
테이블 변수를 이용하여 쿼리의 복잡성을 떨어트릴수 있으며, 속도 개선에 많은 도움이 될 것입니다.

테이블 변수와 임시 테이블의 차이점

임시테이블 테이블 변수
존재 기간 명시적으로 삭제를 안할 시에는 세션 연결 기간동안 존재 명시적으로 삭제를 안할 시에는 배치 처리기간 동안 존재
저장소 Tempdb Tempdb
쿼리비용 대용량에서는 쿼리 비용 유리 소용량에서 쿼리 비용 유리
장단점 대용량 데이터 처리에 유리 소용량 데이터 처리에서 유리
세션 단위 처리시에 사용 저장 프로시져에서 테이블 변수 사용하면 임시 테이블 사용할 떄보다 저장 프로시저를 다시 컴파일하는 일이 줄어듦
배치 처리 단위인 저장 프로시져에서 사용 유리

마치며

잘못 사용하면 성능상 문제가 있겠지만 잘 사용하면 너무나 유용한 기능입니다. 물론 말은 쉽습니다. 하하
사실 잘못 사용하기가 더 어려운 기능이겠네요. !!
좋은 하루 되세요

테이블 변수 임시 테이블 차이점 표 출처 : RunHanii 블로그