Partilhar via


Como chamar o tempo de execução do .NET nas extensões de linguagem do SQL Server

Aplica-se a: SQL Server 2019 (15.x) e versões posteriores

O recurso Extensões de Linguagem do SQL Server usa o procedimento armazenado do sistema sp_execute_external_script como a interface para chamar o tempo de execução do .NET.

Este artigo de instruções explica os detalhes da implementação do código C# executado no SQL Server.

Onde colocar classes C#

Você chama o código C# no SQL Server carregando bibliotecas .NET compiladas (DLLs) e outras dependências no banco de dados usando a biblioteca externa DDL. Para obter mais informações, consulte Criar uma DLL .NET a partir de um projeto C#.

Princípios básicos

A seguir estão alguns princípios básicos ao executar C# no SQL Server.

  • Classes .NET personalizadas compiladas devem existir em arquivos DLL.

  • O método C# que você está chamando deve ser fornecido no script parâmetro no procedimento armazenado.

  • Se a classe pertence a um pacote, o packageName deve ser fornecido.

  • params é usado para passar parâmetros para uma classe C#. Não há suporte para chamar um método que requer argumentos. Portanto, os parâmetros são a única maneira de passar valores de argumento para o seu método.

Observação

Esta nota reafirma operações com e sem suporte específicas para C# no SQL Server 2019 (15.x) e versões posteriores. No procedimento armazenado, os parâmetros de entrada são suportados, enquanto os parâmetros de saída não são suportados.

Chamar código C#

O procedimento armazenado do sistema sp_execute_external_script é a interface usada para chamar o tempo de execução do .NET. O exemplo a seguir mostra um sp_execute_external_script usando a extensão .NET e parâmetros para especificar caminho, script e seu código personalizado.

Observação

Você não precisa definir qual método chamar. Por padrão, um método chamado Execute é chamado. Isso significa que você precisa seguir o SDK de extensibilidade da Microsoft para C# para SQL Server e implementar um Execute método em sua classe C#.

DECLARE @param1 AS INT;

SET @param1 = 3;

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

Usar biblioteca externa

No SQL Server 2019 (15.x) e versões posteriores, você pode usar bibliotecas externas para a linguagem C# no Windows. Você pode compilar suas classes em um arquivo DLL e carregar a DLL e outras dependências no banco de dados usando o CREATE EXTERNAL LIBRARY DDL.

Exemplo de como carregar um arquivo DLL com biblioteca externa:

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

Quando ele cria uma biblioteca externa, o SQL Server automaticamente tem acesso às classes C# e você não precisa definir nenhuma permissão especial para o caminho.

O código a seguir é um exemplo de chamada Execute do método na classe MyClass de um pacote MyPackage, carregado como uma biblioteca externa:

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

Para obter mais informações, consulte CREATE EXTERNAL LIBRARY.