다음을 통해 공유


SQL Server 언어 확장에서 .NET 런타임을 호출하는 방법

적용 대상: SQL Server 2019(15.x) 이상 버전

SQL Server 언어 확장 기능은 sp_execute_external_script 시스템 저장 프로시저를 인터페이스로 사용하여 .NET 런타임을 호출합니다.

이 방법 문서에서는 SQL Server에서 실행되는 C# 코드에 대한 구현 세부 정보를 설명합니다.

C# 클래스를 배치할 위치

외부 라이브러리 DDL을 사용하여 컴파일된 .NET 라이브러리(DLL) 및 기타 종속성을 데이터베이스에 업로드하여 SQL Server에서 C# 코드를 호출합니다. 자세한 내용은 C# 프로젝트에서 .NET DLL 만들기를 참조하세요.

기본 원칙

다음은 SQL Server에서 C#을 실행할 때 몇 가지 기본 원칙입니다.

  • 컴파일된 사용자 지정 .NET 클래스는 DLL 파일에 있어야 합니다.

  • 호출하는 C# 메서드는 저장 프로시저의 script 매개 변수에 제공되어야 합니다.

  • 클래스가 패키지에 속하면 packageName을(를) 제공해야 합니다.

  • params은(는) C# 클래스에 매개 변수를 전달하는 데 사용됩니다. 인수가 필요한 메서드 호출은 지원되지 않습니다. 따라서 매개 변수는 인수 값을 메서드에 전달하는 유일한 방법입니다.

참고 항목

이 참고 사항은 SQL Server 2019(15.x) 이상 버전에서 C#과 관련된 지원되는 작업과 지원되지 않는 작업을 다시 설명합니다. 저장 프로시저에서는 입력 매개 변수가 지원되지만 출력 매개 변수는 지원되지 않습니다.

C# 코드 호출

sp_execute_external_script 시스템 저장 프로시저는 .NET 런타임을 호출하기 위해 사용되는 인터페이스입니다. 다음 예제에서는 .NET 확장 및 경로, 스크립트 및 사용자 지정 코드를 지정하기 위한 매개 변수를 사용하는 sp_execute_external_script를 보여 줍니다.

참고 항목

호출할 메서드를 정의할 필요가 없습니다. 기본적으로 Execute(이)라는 메서드가 호출됩니다. 즉 SQL Server용 C#용 Microsoft 확장성 SDK를 따르고 C# 클래스에서 Execute 메서드를 구현해야 합니다.

DECLARE @param1 INT;

SET @param1 = 3;

EXEC sp_execute_external_script
    @language = N'dotnet',
    @script = N'<PackageName>.<ClassName>',
    @input_data_1 = N'<Input Query>',
    @param1 = @param1;

외부 라이브러리 사용

SQL Server 2019(15.x) 이상 버전에서는 Windows에서 C# 언어에 대한 외부 라이브러리를 사용할 수 있습니다. CREATE EXTERNAL LIBRARY DDL을 사용하여 클래스를 DLL 파일로 컴파일하고 DLL 및 기타 종속성을 데이터베이스에 업로드할 수 있습니다.

외부 라이브러리를 사용하여 DLL 파일을 업로드하는 방법의 예제:

CREATE EXTERNAL LIBRARY [dotnetlibrary]
FROM (CONTENT = '<local path to .dll file>')
WITH (LANGUAGE = 'dotnet');
GO

외부 라이브러리를 만들면 SQL Server는 자동으로 C# 클래스에 액세스할 수 있으며 경로에 대한 특별 권한을 설정할 필요가 없습니다.

다음 코드는 외부 라이브러리로 업로드된 MyPackage 패키지에서 MyClass 클래스의 Execute 메서드를 호출하는 예제입니다.

EXEC sp_execute_external_script
    @language = N'dotnet',
    @script = N'MyPackage.MyClass',
    @input_data_1 = N'SELECT * FROM MYTABLE'
WITH RESULT SETS((column1 INT));

자세한 내용은 CREATE EXTERNAL LIBRARY를 참조하세요.