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 Microsoft .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, veja Funções CLR definidas pelo usuário. 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. É possível criar, alterar e remover objetos de banco de dados que fazem referência aos módulos de código gerenciado, mas essas referências não serão executadas no SQL Server, a menos que a Opção clr enabled tenha sido habilitada com sp_configure (Transact-SQL).

A implantação de um projeto do SQL Server no Microsoft Visual Studio registra um assembly no banco de dados especificado para o projeto. Ao implantar o projeto, cria-se também as funções CLR no banco de dados para todos os métodos anotados com o atributo SqlFunction . Para obter mais informações, consulte Deploying CLR Database Objects.

Acessar recursos externos

Funções CLR podem ser usadas para acessar recursos externos, como arquivos, recursos de rede, serviços Web, outros bancos de dados (incluindo instâncias remotas do SQL Server). Isso pode ser obtido usando diversas classes no .NET Framework, como System.IO, System.WebServices e System.Sql, entre outras. O assembly que contém essas funções deve ser configurado pelo menos com o conjunto de permissões EXTERNAL_ACCESS para este propósito. Para obter mais informações, consulte CREATE ASSEMBLY (Transact-SQL). 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.

Para criar, modificar ou descartar assemblies no SQL Server

Para 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). Isso pode permitir que você reutilize código herdado como UDFs CLR ou escreva UDFs críticas para o desempenho em código nativo e requer o uso de um assembly UNSAFE. Veja Segurança de acesso a código da integração CLR para obter advertências sobre o uso de assemblies UNSAFE.

Confira também