Как вызвать среду выполнения .NET в расширениях языка SQL Server
Область применения: SQL Server 2019 (15.x) и более поздних версий
Функция расширения языка SQL Server использует системную хранимую процедуру sp_execute_external_script в качестве интерфейса для вызова среды выполнения .NET.
В этой статье описываются сведения о реализации кода 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 и реализовать Execute
метод в классе 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#, и вам не нужно устанавливать специальные разрешения на путь.
Следующий код является примером вызова Execute
метода в классе MyClass
из пакета MyPackage
, отправленного в виде внешней библиотеки:
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.