CLR 함수 만들기

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

Microsoft .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(Transact-SQL)를 사용하여 clr 사용 옵션을 사용하도록 설정하지 않으면 SQL Server에서 이러한 참조가 실행되지 않습니다.

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

외부 리소스 액세스

CLR 함수를 사용하여 파일, 네트워크 리소스, 웹 서비스, 기타 데이터베이스(SQL Server의 원격 인스턴스 포함)와 같은 외부 리소스에 액세스할 수 있습니다. 이 작업은 .NET Framework의 다양한 클래스(예: System.IO, System.WebServicesSystem.Sql등)를 사용하여 수행할 수 있습니다. 이러한 함수를 포함하는 어셈블리는 최소한 이 목적을 위해 EXTERNAL_ACCESS 권한 집합으로 구성해야 합니다. 자세한 내용은 CREATE ASSEMBLY(Transact-SQL)를 참조 하세요. SQL 클라이언트 관리 공급자를 사용하여 SQL Server의 원격 인스턴스에 액세스할 수 있습니다. 그러나 원래 서버에 대한 루프백 연결은 CLR 함수에서 지원되지 않습니다.

SQL Server에서 어셈블리를 만들거나 수정하거나 삭제하려면

CLR 함수를 만들려면

네이티브 코드 액세스

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

참고 항목