Compartilhar via


Criar funções CLR

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

Você pode criar um objeto de banco de dados dentro de uma instância do SQL Server que é programada em um assembly criado no CLR (Common Language Runtime) do .NET Framework. Os objetos de banco de dados que podem usar o modelo de programação avançado fornecido pelo CLR incluem funções agregadas, funções, procedimentos armazenados, gatilhos e tipos.

Criar uma função CLR no SQL Server envolve as seguintes etapas:

  • Defina a função como um método estático de uma classe em uma linguagem com suporte pelo .NET Framework. Para obter mais informações sobre como programar funções no Common Language Runtime, consulte Funções Definidas pelo Usuário CLR. Em seguida, compile a classe para criar um assembly no .NET Framework, usando o compilador de linguagem apropriado.

  • Registre o assembly no SQL Server usando a instrução CREATE ASSEMBLY. Para obter mais informações sobre assemblies no SQL Server, consulte Assemblies (Mecanismo de Banco de Dados).

  • Crie a função que faz referência ao assembly registrado, usando a instrução CREATE FUNCTION .

A execução do código CLR está desativada por padrão no SQL Server. Você pode criar, alterar e remover objetos de banco de dados que fazem referência a módulos de código gerenciado, mas essas referências não são executadas no SQL Server, a menos que a opção clr habilitada configuração de servidor esteja habilitada usando sp_configure.

A implantação de um projeto do SQL Server no Visual Studio registra um assembly no banco de dados especificado para o projeto. A implantação do projeto também cria funções CLR no banco de dados para todos os métodos anotados com o atributo SqlFunction. Para obter mais informações, consulte Implantar objetos de banco de dados CLR.

Acessar recursos externos

Você pode usar funções CLR para acessar recursos externos, como arquivos, recursos de rede, serviços Web e outros bancos de dados (incluindo instâncias remotas do SQL Server). As funções CLR podem usar várias classes no .NET Framework, como System.IO, System.WebServices, System.Sqle assim por diante. O assembly que contém essas funções deve ser configurado pelo menos com o conjunto de permissões EXTERNAL_ACCESS para essa finalidade. Para obter mais informações, consulte CREATE ASSEMBLY.

O provedor gerenciado do cliente SQL pode ser usado para acessar instâncias remotas do SQL Server. Porém, as conexões de loopback para o servidor de origem não têm suporte em funções CLR.

Criar, modificar ou remover conjuntos no SQL Server

Criar uma função CLR

Acessar código nativo

As funções CLR podem acessar código nativo (não gerenciado), como código escrito em C ou C++, por meio do uso de PInvoke no código gerenciado (consulte Chamando funções nativas no código gerenciado para obter detalhes). Você pode reutilizar o código herdado como UDFs CLR ou escrever UDFs críticas para o desempenho em código nativo, que requerem o uso de um assembly UNSAFE. Confira Segurança de acesso ao código do CLR para precauções sobre o uso de assemblies UNSAFE.