사용자 정의 유형 구현
업데이트: 2006년 4월 14일
이 항목에서는 SQL Server에서 CLR(공용 언어 런타임) 사용자 정의 유형을 만들고 삭제하는 방법에 대해 설명합니다.
사용자 정의 유형 만들기
SQL Server에서 사용자 정의 유형을 만들려면 다음 단계를 순서대로 수행해야 합니다.
- Microsoft .NET Framework에서 지원하는 언어의 클래스나 구조로 사용자 정의 유형을 정의합니다. CLR에서 유형을 프로그래밍하는 방법은 CLR User-Defined Types를 참조하십시오. 그런 다음 적절한 언어 컴파일러로 클래스나 구조를 컴파일하여 .NET Framework에서 어셈블리를 빌드합니다.
- CREATE ASSEMBLY 문을 사용하여 SQL Server에 어셈블리를 등록합니다. SQL Server의 어셈블리에 대한 자세한 내용은 어셈블리(데이터베이스 엔진)를 참조하십시오.
- 등록된 어셈블리를 참조하는 사용자 정의 유형을 만듭니다.
[!참고] Microsoft Visual Studio에서 SQL Server 프로젝트를 배포하면 해당 프로젝트에 대해 지정된 데이터베이스에 어셈블리가 등록됩니다. 또한 프로젝트를 배포하면 SqlUserDefinedType 특성으로 주석이 지정된 모든 클래스 정의에 대해 데이터베이스에서 CLR 사용자 정의 유형을 만듭니다. 자세한 내용은 Deploying CLR Database Objects를 참조하십시오.
[!참고] 기본적으로 SQL Server에서 CLR 코드 실행 기능은 OFF로 설정되어 있습니다. 관리 코드 모듈을 참조하는 데이터베이스 개체를 만들고, 수정하고, 삭제할 수 있지만 sp_configure를 사용하여 clr enabled 옵션을 설정해야만 SQL Server에서 이러한 참조가 실행됩니다.
어셈블리를 작성, 수정 또는 삭제하려면
사용자 정의 유형을 만들려면
사용자 정의 유형 삭제
사용자 정의 유형을 삭제하려면
[!참고] 사용자 정의 유형을 만든 후에는 변경할 수 없습니다. 변경 내용으로 인해 테이블이나 인덱스의 데이터가 무효화될 수 있기 때문입니다. 유형을 수정하려면 해당 유형을 삭제하고 다시 만들거나 WITH UNCHECKED DATA 절을 사용하여 ALTER ASSEMBLY 문을 실행해야 합니다.
해당 유형에 대한 참조를 모두 제거하기 전에는 사용자 정의 유형을 삭제할 수 없습니다. 제거해야 하는 참조는 다음과 같습니다.
- 해당 유형에 대해 정의된 열
- 식에서 해당 유형을 참조하는 계산 열 및 CHECK 제약 조건
- 해당 유형을 참조하여 정의된 식이 있는 스키마 바운드 뷰 및 함수
- 함수와 저장 프로시저의 매개 변수
사용자 정의 유형에 종속된 열을 찾으려면
다음 예에서는 사용자 정의 유형 ComplexNumber
에 정의된 열에 대한 메타데이터를 검색합니다.
SELECT * FROM sys.columns
WHERE user_type_id = TYPE_ID('ComplexNumber');
다음 예에서는 사용자 정의 유형 ComplexNumber
에 정의된 열에 대해 최소 권한이 부여된 사용자의 제한된 메타데이터를 검색합니다.
SELECT * FROM sys.column_type_usages
WHERE user_type_id = TYPE_ID('ComplexNumber');
사용자 정의 유형에 종속된 계산 열 식, CHECK 제약 조건 식, 스키마 바운드 뷰 및 함수 식을 찾으려면
다음 예에서는 사용자 정의 유형 ComplexNumber
에 종속된 계산 열과 해당 테이블의 이름을 검색합니다.
SELECT OBJECT_NAME(object_id) AS object_name,
COL_NAME(object_id, column_id) AS column_name
FROM sys.sql_dependencies
WHERE referenced_major_id = TYPE_ID('ComplexNumber')
AND class = 2
AND OBJECTPROPERTY(object_id, 'IsTable')=1;
다음 예에서는 사용자 정의 유형 ComplexNumber
에 종속된 CHECK 제약 조건 이름과 정의된 제약 조건의 대상 개체 이름을 검색합니다.
SELECT SCHEMA_NAME(o.schema_id) AS schema_name,
OBJECT_NAME(o.parent_object_id) AS table_name,
OBJECT_NAME(o.object_id) AS constraint_name
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o
ON o.object_id = d.object_id
WHERE referenced_major_id = TYPE_ID('ComplexNumber')
AND class = 2
AND OBJECTPROPERTY(o.object_id, 'IsCheckCnst')=1;
다음 예에서는 사용자 정의 유형 ComplexNumber
를 참조하여 정의된 스키마 바운드 함수 및 뷰의 이름을 검색합니다.
[!참고] SQL Server에서는 사용자 정의 유형과 저장 프로시저, 트리거, 스키마 바운드가 아닌 함수 또는 뷰의 본문에서 사용되는 사용자 정의 유형 간의 종속성을 나타내는 메타데이터가 유지되지 않습니다.
SELECT SCHEMA_NAME(o.schema_id) AS dependent_object_schema,
OBJECT_NAME(o.object_id) AS dependent_object_name,
o.type_desc AS dependent_object_type,
d.class_desc AS kind_of_dependency,
d.referenced_major_id AS referenced_object
FROM sys.sql_dependencies AS d
JOIN sys.objects AS o
ON d.object_id = o.object_id
AND o.type IN ('FN','IF','TF', 'V')
WHERE d.class = 2
AND d.referenced_major_id IN (TYPE_ID('ComplexNumber'))
ORDER BY dependent_object_schema, dependent_object_name;
사용자 정의 유형에 종속된 매개 변수를 찾으려면
다음 예에서는 사용자 정의 유형 ComplexNumber
에 정의된 종속된 매개 변수 이름과 해당 매개 변수가 속한 개체의 이름을 검색합니다.
SELECT OBJECT_NAME(object_id) AS object_name,
NULL AS procedure_number,
name AS param_name,
parameter_id AS param_num,
TYPE_NAME(p.user_type_id) AS type_name
FROM sys.parameters AS p
WHERE p.user_type_id = TYPE_ID('ComplexNumber')
ORDER BY object_name, procedure_number, param_num;
다음 예에서는 사용자 정의 유형 ComplexNumber
에 정의된 매개 변수에 대해 최소 권한이 부여된 사용자의 제한된 메타데이터를 검색합니다.
SELECT * FROM sys.parameter_type_usages
WHERE user_type_id = TYPE_ID('ComplexNumber');
참고 항목
개념
관련 자료
도움말 및 정보
변경 내역
릴리스 | 내역 |
---|---|
2006년 4월 14일 |
|