.Net Types in SQL Server 2005

 

SQL Server 2000에서 사용되었던 UDT와 유사하지만 많이 다른 개념입니다.

그럼 UDT를 왜 사용해야 하는가?

è     기본적으로 제공되는 데이터 타입으로는 표현이 불가능한 부분을 데이터 타입화 하기 위한 방법으로, 예를 들어 위도, 경도 같은 값의 표현을 할 수 있게 됩니다.

 

SQL Server 2000 UDT와의 차이점

-         복수의 값을 표현할 수 있다

-         접근자(프로퍼트)를 이용하거나, 복잡한 로직처리를 mulators(일종의 method) 로 처리할 수 있다.

-         written in compiled language (.Net language로 구현)

 

Cataloging a UDT

UDF와 동일하게 UDT 역시 catalog에 등록을 해야 합니다.

순서도 동일합니다.

먼저 Assembly를 등록한 후, CREATE TYPE을 통해 등록을 합니다.

 

Working with UDTs

Type은 다음과 같은 곳에서 이용할 수 있다.

-         테이블의 컬럼을 정의할 때

-         변수나 파라미터를 정의할 때

-         UDF의 리턴값으로

 

사용예 : PointCls 라는 타입이 추가 된 경우

 

CREATE TABLE point_tab(

             Id int primary key,

             Thepoint PointCls)

 

INSERT INTO point_tab VALUES (1, 100:200)

 

 

Accessors and Mutators

-         property method로 이해하면 쉽습니다.

실제 UDT Accessors and Mutators를 정의할 때 .Net 코드로 property method를 구현하면 됩니다.

 

SELECT thepoint.X, thepoint.U FROM point_tab

와 같이 사용 가능합니다.

 

 

UDT state

UDT를 정의 할 때 일반적으로 두 가지의 Format으로 만들 수 있습니다.

-         Native : 단순한 형태. 일반적인 UDT를 만들 때 사용

-         UserDefined : 복잡한 형태로 구현해야 할 method가 많다. 보다 세밀한 제어가 필요할 때 사용

n         예를 들어 order by 같은 것을 할 경우 Native를 선택했을 경우에는 order by 뒤에 나온 값을 기준으로 정렬하되, 같은 값이 존재할 경우 UDT에 정의된 순서에 의해 정렬하게 되는데, 임의로 아니면 원하는 형태의 정렬방식 대로 정렬하고 싶다면 UserDefined로 만들어 세부적으로 제어할 수 있는 코드를 추가해야 한다.

 

UDG (user defined Aggregate)

-         간단하게 설명만 하면

-         UDT로 만든 컬럼을 SUM, AVG와 같은 작업을 하게 될 경우나 특별한 형태의 Aggreation 함수를 만들 경우 예를 들면

        SELECT MyFunc(lastname) FROM authors GROUP BY ReportsTo

 

         id           name

         1            a, b, c

         2            d, e

         3            null

 

              이런 식으로 출력하기 위한 함수를 정의하거나 할 때 사용한다.

+ Recent posts