다음을 통해 공유


CLR 함수 만들기

적용 대상: SQL Server 2016(13.x) 이상 버전

.NET Framework CLR(공용 언어 런타임)에서 만든 어셈블리에서 프로그래밍된 SQL Server 인스턴스 내에 데이터베이스 개체를 만들 수 있습니다. 공용 언어 런타임에서 제공하는 풍부한 프로그래밍 모델을 사용할 수 있는 데이터베이스 객체에는 집계 함수, 함수, 저장 프로시저, 트리거 및 유형이 포함됩니다.

SQL Server에서 CLR 함수를 만들려면 다음 단계를 수행합니다.

  • .NET Framework에서 지원하는 언어로 클래스의 정적 메서드로 함수를 정의합니다. 공용 언어 런타임에서 함수를 프로그래밍하는 방법에 대한 자세한 내용은 CLR 사용자 정의 함수참조하세요. 그런 다음 적절한 언어 컴파일러를 사용하여 .NET Framework에서 어셈블리를 빌드하는 클래스를 컴파일합니다.

  • CREATE ASSEMBLY 문을 사용하여 SQL Server에 어셈블리를 등록합니다. SQL Server의 어셈블리에 대한 자세한 내용은 어셈블리(데이터베이스 엔진)를 참조하세요.

  • CREATE FUNCTION 문을 사용하여 등록된 어셈블리를 참조하는 함수를 만듭니다.

SQL Server에서는 CLR 코드 실행이 기본적으로 해제되어 있습니다. 관리 코드 모듈을 참조하는 데이터베이스 개체를 만들고, 변경하고, 삭제할 수 있지만, sp_configure사용하여 clr 사용 서버 구성 옵션을 사용하도록 설정하지 않는 한 이러한 참조는 SQL Server에서 실행되지 않습니다.

Visual Studio에서 SQL Server 프로젝트를 배포하면 프로젝트에 대해 지정된 데이터베이스에 어셈블리가 등록됩니다. 또한 프로젝트를 배포하면 데이터베이스에 SqlFunction 특성으로 주석이 추가된 모든 메서드에 대한 CLR 함수가 만들어집니다. 자세한 내용은 CLR 데이터베이스 개체 배포참조하세요.

외부 리소스 액세스

CLR 함수를 사용하여 파일, 네트워크 리소스, 웹 서비스 및 기타 데이터베이스(SQL Server의 원격 인스턴스 포함)와 같은 외부 리소스에 액세스할 수 있습니다. CLR 함수는 .NET Framework에서 System.IO, System.WebServices, System.Sql등과 같은 다양한 클래스를 사용할 수 있습니다. 이러한 함수를 포함하는 어셈블리는 최소한 이 목적을 위해 EXTERNAL_ACCESS 권한 집합으로 구성해야 합니다. 자세한 내용은 CREATE ASSEMBLY참조하세요.

SQL 클라이언트 관리 공급자를 사용하여 SQL Server의 원격 인스턴스를 액세스할 수 있습니다. 그러나 CLR 함수에서는 원본 서버에 대한 루프백 연결을 지원하지 않습니다.

SQL Server에서 어셈블리 만들기, 수정 또는 삭제

CLR 함수 만들기

네이티브 코드 액세스

CLR 함수는 관리 코드에서 PInvoke를 사용하여 C 또는 C++로 작성된 코드와 같은 네이티브(관리되지 않는) 코드에 액세스할 수 있습니다(자세한 내용은 관리 코드에서 네이티브 함수 호출 참조). 레거시 코드를 CLR UDF로 다시 사용하거나 네이티브 코드에서 성능에 중요한 UDF를 작성할 수 있으며 UNSAFE 어셈블리를 사용해야 합니다. UNSAFE 어셈블리 사용에 대한 주의는 CLR 통합 코드 액세스 보안 참조하세요.