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.