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.WebServices
System.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 을 참조하십시오.
참고 항목
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기