Partilhar via


Como chamar o runtime do .NET nas Extensões de Linguagem do SQL Server

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

O recurso de Extensões de Linguagem do SQL Server usa o procedimento armazenado do sistema sp_execute_external_script como a interface para realizar a chamada do runtime .NET.

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

Onde posicionar 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 DDL da biblioteca externa. Para obter mais informações, consulte Criar uma DLL .NET de um projeto C#.

Princípios básicos

Veja a seguir alguns princípios básicos ao executar o 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 parâmetro script no procedimento armazenado.

  • Se a classe pertencer a um pacote, o packageName deverá ser fornecido.

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

Observação

Esta observação reitera operações com e sem suporte específicas para C# no SQL Server 2019 (15.x) e versões posteriores. No procedimento armazenado, há suporte a parâmetros de entrada, mas não a parâmetros de saída.

Chamar código C#

O procedimento armazenado do sistema sp_execute_external_script é a interface usada para chamar o runtime do .NET. O exemplo a seguir mostra um sp_execute_external_script que usa a extensão do .NET e parâmetros para especificar o caminho, o script e o código personalizado.

Observação

Observe que você não precisa definir qual método chamar. Por padrão, um método chamado Execute é chamado. Isso significa que é necessário seguir o SDK de Extensibilidade da Microsoft para C# para SQL Server e implementar um método Execute em sua classe 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;

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 fazer upload do arquivo DLL e de outras dependências no banco de dados usando a DDL CREATE EXTERNAL LIBRARY.

Exemplo de como fazer upload de um arquivo DLL com a biblioteca externa:

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

Ao criar uma biblioteca externa, o SQL Server recebe automaticamente acesso a classes C# e não é necessário definir nenhuma permissão especial para o caminho.

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

EXEC 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, confira CREATE EXTERNAL LIBRARY.