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 Common Language Runtime incluem funções agregadas, funções, procedimentos armazenados, gatilhos e tipos.
A criação de 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 suportada 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 à assembleia registada 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 descartar objetos de banco de dados que fazem referência a módulos de código gerenciados, mas essas referências não são executadas no SQL Server, a menos que a opção de configuração de servidor clr habilitado para clr seja habilitada usando sp_configure.
Implantar um projeto de SQL Server no Visual Studio regista um assembly na base de dados que foi especificada 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.
Aceder a 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.Sql
e assim por diante. O assembly que contém tais funções deve pelo menos ser configurado com a permissão EXTERNAL_ACCESS
definida para essa finalidade. Para obter mais informações, consulte CREATE ASSEMBLY.
O SQL Client Managed Provider pode ser usado para acessar instâncias remotas do SQL Server. No entanto, as conexões de loopback com o servidor de origem não são suportadas nas funções CLR.
Criar, modificar ou descartar assemblies no SQL Server
Criar uma função CLR
Aceda ao 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
do código gerenciado (consulte Chamando funções nativas do de código gerenciado para obter detalhes). Você pode reutilizar código herdado como UDFs CLR ou escrever UDFs críticos de desempenho em código nativo, e isso requer o uso de uma assembly UNSAFE
. Consulte de segurança de acesso ao código de integração CLR para obter precauções sobre o uso de assemblies UNSAFE
.