CLR 함수 만들기Create CLR Functions

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터 시작)아니요Azure SQL 데이터베이스아니요Azure SQL 데이터 웨어하우스아니요병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server 인스턴스에서 MicrosoftMicrosoft .NET Framework.NET Framework CLR(공용 언어 런타임)에 만들어진 어셈블리에 프로그래밍된 데이터베이스 개체를 만들 수 있습니다.You can create a database object inside an instance of SQL ServerSQL Server that is programmed in an assembly created in the MicrosoftMicrosoft .NET Framework.NET Framework common language runtime (CLR). CLR에서 제공하는 풍부한 프로그래밍 모델을 활용할 수 있는 데이터베이스 개체에는 집계 함수, 함수, 저장 프로시저, 트리거 및 형식이 있습니다.Database objects that can leverage the rich programming model provided by the common language runtime include aggregate functions, functions, stored procedures, triggers, and types.

SQL ServerSQL Server 에서 CLR 함수를 만드는 방법은 다음과 같습니다.Creating a CLR function in SQL ServerSQL Server involves the following steps:

  • .NET Framework.NET Framework에서 지원하는 언어를 사용하여 클래스의 정적 메서드로 함수를 정의합니다.Define the function as a static method of a class in a language supported by the .NET Framework.NET Framework. 공용 언어 런타임에서 함수를 프로그래밍하는 방법은 CLR 사용자 정의 함수를 참조하세요.For more information about how to program functions in the common language runtime, see CLR User-Defined Functions. 함수를 정의한 다음 적절한 언어 컴파일러를 사용하여 .NET Framework.NET Framework 에서 어셈블리를 빌드하기 위한 클래스를 컴파일합니다.Then, compile the class to build an assembly in the .NET Framework.NET Framework by using the appropriate language compiler.

  • CREATE ASSEMBLY 문을 사용하여 SQL ServerSQL Server에 어셈블리를 등록합니다.Register the assembly in SQL ServerSQL Server by using the CREATE ASSEMBLY statement. SQL ServerSQL Server의 어셈블리에 대한 자세한 내용은 어셈블리(데이터베이스 엔진)를 참조하세요.For more information about assemblies in SQL ServerSQL Server, see Assemblies (Database Engine).

  • CREATE FUNCTION 문을 사용하여 등록된 어셈블리를 참조하는 함수를 만듭니다.Create the function that references the registered assembly by using the CREATE FUNCTION statement.

참고

MicrosoftMicrosoft Visual StudioVisual Studio 에서 SQL Server 프로젝트를 배포하면 해당 프로젝트에 대해 지정된 데이터베이스에 어셈블리가 등록됩니다.Deploying a SQL Server Project in MicrosoftMicrosoft Visual StudioVisual Studio registers an assembly in the database that was specified for the project. 또한 프로젝트를 배포하면 모든 메서드에 대해 SqlFunction 특성으로 주석 지정으로 지정하기 위해 데이터베이스에 CLR 함수를 만듭니다.Deploying the project also creates CLR functions in the database for all methods annotated with the SqlFunction attribute. 자세한 내용은 Deploying CLR Database Objects을 참조하세요.For more information, see Deploying CLR Database Objects.

참고

SQL ServerSQL Server 의 CLR 코드 실행 기능은 기본적으로 해제되어 있습니다.The ability of SQL ServerSQL Server to execute CLR code is off by default. 관리 코드 모듈을 참조하는 데이터베이스 개체를 만들고 변경하고 삭제할 수 있지만 SQL ServerSQL Server sp_configure(Transact-SQL) 를 사용하여 clr enabled 옵션 을 설정하지 않는 한 이러한 참조는에서 실행되지 않습니다.You can create, alter, and drop database objects that reference managed code modules, but these references will not execute in SQL ServerSQL Server unless the clr enabled Option is enabled by using sp_configure (Transact-SQL).

외부 리소스 액세스Accessing External Resources

CLR 함수를 사용하여 파일, 네트워크 리소스, 웹 서비스, 기타 데이터베이스( SQL ServerSQL Server의 원격 인스턴스 포함) 등의 외부 리소스에 액세스할 수 있습니다.CLR functions can be used to access external resources such as files, network resources, Web Services, other databases (including remote instances of SQL ServerSQL Server). .NET Framework.NET Framework, System.IO, System.WebServices과 같은 System.Sql의 다양한 클래스를 사용하면 외부 리소스에 대한 액세스가 가능합니다.This can be achieved by using various classes in the .NET Framework.NET Framework, such as System.IO, System.WebServices, System.Sql, and so on. 액세스를 위해서는 이러한 함수를 포함하는 어셈블리를 최소한 EXTERNAL_ACCESS 권한 집합으로 구성해야 합니다.The assembly that contains such functions should at least be configured with the EXTERNAL_ACCESS permission set for this purpose. 자세한 내용은 CREATE ASSEMBLY(Transact-SQL)에서 지원하는 언어를 사용하여 클래스의 정적 메서드로 함수를 정의합니다.For more information, see CREATE ASSEMBLY (Transact-SQL). SQL 클라이언트 관리 공급자를 사용하여 SQL ServerSQL Server의 원격 인스턴스를 액세스할 수 있습니다.The SQL Client Managed Provider can be used to access remote instances of SQL ServerSQL Server. 그러나 CLR 함수에서는 원본 서버에 대한 루프백 연결을 지원하지 않습니다.However, loopback connections to the originating server are not supported in CLR functions.

SQL Server에서 어셈블리를 만들거나 수정하거나 삭제하려면To create, modify, or drop assemblies in SQL Server

네이티브 코드 액세스Accessing Native Code

CLR 함수를 사용하면 관리 코드에서 PInvoke를 사용하는 방법을 통해 C 또는 C++로 작성된 코드 등의 네이티브(비관리) 코드에 액세스할 수 있습니다. 자세한 내용은 관리 코드에서 네이티브 함수 호출 을 참조하세요.CLR functions can be used to access native (unmanaged) code, such as code written in C or C++, via the use of PInvoke from managed code (see Calling Native Functions from Managed Code for details). 네이티브 코드에 액세스하면 레거시 코드를 CLR UDF로 다시 사용하거나 성능에 중요한 영향을 주는 UDF를 네이티브 코드로 작성할 수 있습니다.This can allow you to re-use legacy code as CLR UDFs, or write performance-critical UDFs in native code. 이렇게 하려면 UNSAFE 어셈블리를 사용해야 합니다.This requires using an UNSAFE assembly. UNSAFE 어셈블리 사용에 대한 주의 사항은 CLR Integration Code Access Security 을 참조하십시오.See CLR Integration Code Access Security for cautions about use of UNSAFE assemblies.

참고 항목See Also

사용자 정의 함수 만들기(데이터베이스 엔진) Create User-defined Functions (Database Engine)
사용자 정의 집계 만들기 Create User-defined Aggregates
사용자 정의 함수 실행 Execute User-defined Functions
사용자 정의 함수 보기 View User-defined Functions
CLR(공용 언어 런타임) 통합 프로그래밍 개요Common Language Runtime (CLR) Integration Programming Concepts