Бөлісу құралы:


Как вызвать среду выполнения .NET в расширениях языка SQL Server

Область применения: SQL Server 2019 (15.x) и более поздних версий

Функция расширения языка SQL Server использует системную хранимую процедуру sp_execute_external_script в качестве интерфейса для вызова среды выполнения Java.

В этой статье описываются сведения о реализации кода C#, выполняемого в SQL Server.

Место размещения классов C#

Код C# в SQL Server вызывается путем отправки скомпилированных библиотек .NET (DLL) и других зависимостей в базу данных с помощью DDL внешней библиотеки . Дополнительные сведения см. в разделе "Создание библиотеки DLL .NET" из проекта C#.

Основные принципы

Ниже приведены некоторые основные принципы при выполнении C# на SQL Server.

  • Скомпилированные пользовательские классы .NET должны существовать в DLL-файлах.

  • Вызываемая процедура C# должна быть указана в script параметре хранимой процедуры.

  • Если класс принадлежит пакету, packageName необходимо указать его.

  • params используется для передачи параметров в класс C#. Вызов метода, требующего аргументов, не поддерживается. Поэтому параметры являются единственным способом передачи значений аргументов в метод.

Примечание.

Эта заметка использует поддерживаемые и неподдерживаемые операции, относящиеся к C# в SQL Server 2019 (15.x) и более поздних версиях. В хранимой процедуре поддерживаются входные параметры, а выходные параметры не поддерживаются.

Вызов кода C#

Sp_execute_external_script системная хранимая процедура — это интерфейс, используемый для вызова среды выполнения .NET. В следующем примере показано sp_execute_external_script использование расширения .NET и параметров для указания пути, скрипта и пользовательского кода.

Примечание.

Вам не нужно определять метод для вызова. По умолчанию вызывается execute метод. Это означает, что необходимо следовать пакету SDK расширяемости Майкрософт для C# для SQL Server и реализовать метод выполнения в классе C#.

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) и более поздних версиях можно использовать внешние библиотеки для языка C# в Windows. Классы можно скомпилировать в DLL-файл и передать библиотеку DLL и другие зависимости в базу данных с помощью DDL-файла CREATE EXTERNAL LIBRARY .

Пример отправки DLL-файла с внешней библиотекой:

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

При создании внешней библиотеки SQL Server автоматически имеет доступ к классам C#, и вам не нужно устанавливать специальные разрешения на путь.

Следующий код является примером вызова метода в классе из пакета, отправленного в виде внешней библиотеки:

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 LANGUAGE.