MSSQL의 계산열(Computed Column)을 사용해볼까?

MSSQL로 작업을 하고 있는데 발령테이블(T_발령)이 있다.
이 테이블은 사원의 발령사항을 나열하는 목적이 있다.
그래서 테이블 구성은 다음과 같다.

CREATE TABLE T_발령
(
  사번 varchar(20),
  발령일자 char(8),
  발령코드 varchar(20),
  PRIMARY KEY ( 사번, 발령일자 )
);

이런식으로 구성되어 있다.
그래서 데이터도 다음과 같이 쌓인다.

사번          발령일자   발령코드

990041 20111201 1
990041 20111215 1
990041 20120101 1

그런데 문제가 2011년12월31일 현재 발령정보가 뭔가?
라고 물어보면 위 테이블상으로 쿼리를 하기 복잡해진다.
왜냐면 시작일은 있는데 종료일자가 없기 때문이다.

그래서 고민했다.
왜? 종료일을 넣지 않았을까? 종료일만 있다면
between을 이용해서 간단하게 쿼리 할 수 있지 않나? 라고~~

그래서 이것저것 찾아보다가 최근에 계산열(Computed Column)이 있다는 사실을
알게 되었다.

간단하게 다음과 같이 사용한다.

CREATE TABLE T_덧셈
(
  A값 int,
  B값 int,
  덧셈값 int
);

이렇게 테이블이 구성되어 있다면 우리는 덧셈값 열에는 A랑 B를 합쳐서 넣어줘야 하는데
그러지 말고 아래와 같이 구성하면

CREATE TABLE T_덧셈
(
  A값 int,
  B값 int,
  덧셈값 as ( A값 + B값 )
);

덧셈값 컬럼에는 값을 넣을 필요가 없이 그냥 A와 B값에만 신경쓰면된다.
엄청 편하다!!! *.*

그리고 계산열에는 함수도 쓸 수 있다는 사실!!


CREATE TABLE T_덧셈
(
  A값 int,
  B값 int,
  덧셈값 as ( 더하기함수( A값, B값 ) )
);


더하기함수를 만든후 위와 같이 테이블을 구성하면
A값과 B값이 설정되면 더하기함수를 이용해서 A값과 B값을 가공한 후
덧셈값에 넣어 준다는 사실!!!

바로 이 아래 계산열에 함수를 이용해서 발령 테이블을 개선했다.
마지막날짜를 구하는 함수를 작성한후

ALTER TABLE T_발령 ADD 종료일자 as ( 종료일구하는함수( 사번, 발령일자 ) );

이렇게 만들었더니!!
결과는 아래같이 나왔다.

사번          발령일자   발령코드  종료일자

990041 20111201 1        20111214
990041 20111215 1        20111231
990041 20120101 1        99991231 -> 마지막은 무조건 99991231로 약속


오!! 짱...!!
이제 원하는 대로 between을 이용해서 해당 일자의 발령사항을 얻을 수 있게 되었다.

그런데 문제는
이렇게 좋긴한데 과연 성능에는 얼마만한 영향을 미치게 될지...
그것이 의문이긴 하다. *.*

댓글