Table변수

Table변수는 Meory상에 일시적으로 생성되는 Table로 Query가 실행되는 Session안에서만 유효하며 일반 변수와 같습니다. 또한 Table변수는 Primary Key, Null, Check 이 세가지 제약조건만 허락하며 Table변수선언시 사용자 데이터형식은 사용할 수 없습니다.

주의하실 점은 Table변수를 사용하려면 먼저 생성되어 있어야 한다는 것입니다.


1
2
3
4
5
Declare @Temp2 Table(
 ScrapReasonID Smallint,
 Name   nVarchar(50),
 ModifiedDate DateTime
)
cs

따라서 다음과 같이 임시Table을 사용할때 처럼 Table변수를 생성하는건 불가능합니다.

1
2
3
Select *
Into @Temp2
From Production.ScrapReason
cs


Table변수는 반드시 미리 생성되어 있어야 합니다.

위 예제Query를 보시면 Create Table대신에 Declare가 사용되었습니다. Table 변수는 말그대로 변수이기 때문에 변수를 선언할때와 마찬가지로 Declare가 사용되는 것입니다.
또한 Table변수는 Table이름의 맨앞에 @문자가 선행되어야 합니다.

1
2
3
Insert Into @Temp2
Select *
From Production.ScrapReason
cs


위에서 생성한 Table변수에 Production.ScrapReason Table의 내용을 담습니다.

1
Select * From @Temp2
cs

Table변수을 조회합니다.


위와 같이 Table변수의 생성, 저장, 조회하는 일련의 작업과정은 Query가 실행되는 Session안에서 한단위로 이루어 져야 합니다. 예를 들어 Table변수을 생성하는 부분과 Table변수에 데이터를 저장하는 부분을 별도의 Session안에서 실행하려고 하면 오류를 일으키게 되는 것입니다.

참고:

보통의 경우 성능향상을 위해서는 임시Table보다는 Table변수가 더 유리합니다. 또한 SQL Server에 Disk관련 I/O가 많아 성능상에 Issue가 발생했을 경우 Table변수를 활용하면 이 문제를 어느정도 해소할 수 있습니다. 단 Table변수는 Memory상에 배치되고 실행되는 것이므로 Memory자원을 더 많이 잡아먹는 단점이 있습니다.


따라서 분명 임시Table이나 변수Table은 용도에 따라 각각의 이점이 있을 것입니다. 따라서 맹목적으로 Table변수를 고집할 필요는 없습니다. 난해한 표현이지만 상황에 맞게 가장 적절한 대안을 찾으시길 바랍니다.


출처: http://lab.cliel.com/entry/SQL-임시-Table과-변수-Table [CLIEL LAB]

'SQL > MS-SQL' 카테고리의 다른 글

제약 조건(Constraint) #2 (기존 테이블에 추가/삭제)  (0) 2017.09.20
제약 조건(Constraint) #1 (의미와 설정)  (0) 2017.09.20
테이블 컬럼변경  (0) 2017.09.20
SELF JOIN  (0) 2017.09.19
join Diagram  (0) 2017.09.19

+ Recent posts