Compartilhar via


Implementando assemblies

Aplica-se: SQL Server

Este artigo fornece informações sobre as seguintes áreas para ajudá-lo a implementar e trabalhar com assemblies no banco de dados:

  • Criando assemblies
  • Modificando assemblies
  • Descartar, desabilitar e habilitar assemblies
  • Gerenciando versões de assembly

Criar assemblies

Os assemblies são criados no SQL Server usando a instrução Transact-SQL CREATE ASSEMBLY ou no SQL Server Management Studio usando o Editor Assistido por Assembly. Além disso, a implantação de um projeto do SQL Server no Microsoft Visual Studio registra um assembly no banco de dados especificado para o projeto. Para obter mais informações, consulte Deploying CLR Database Objects.

Modificar assemblies

Os assemblies são modificados no SQL Server usando a instrução Transact-SQL ALTER ASSEMBLY ou no SQL Server Management Studio usando o Editor Assistido por Assembly.

Você pode modificar um assembly quando quiser executar as seguintes ações:

  • Altere a implementação do assembly carregando uma versão mais nova dos binários do assembly. Para obter mais informações, consulte Gerenciar versões de assembly mais adiante neste artigo.

  • Altere o conjunto de permissões do assembly. Para obter mais informações, consulte Projetando assemblies.

  • Altere a visibilidade do assembly. Assemblies visíveis estão disponíveis para referência no SQL Server. Assemblies não visíveis não estão disponíveis, mesmo que sejam carregados no banco de dados. Por padrão, os assemblies carregados em uma instância do SQL Server são visíveis.

  • Adicione ou descarte um arquivo de depuração ou de origem associado ao assembly.

Descartar, desabilitar e habilitar assemblies

Os assemblies são descartados usando a instrução Transact-SQL DROP ASSEMBLY ou o SQL Server Management Studio.

Por padrão, todos os assemblies criados no SQL Server são desabilitados da execução. Você pode usar a clr enabled opção do procedimento armazenado do sp_configure sistema para desabilitar ou habilitar a execução de todos os assemblies carregados no SQL Server. Desabilitar a execução do assembly impede que funções CLR (Common Language Runtime), procedimentos armazenados, gatilhos, agregações e tipos definidos pelo usuário sejam executados e interrompe qualquer um que esteja sendo executado no momento. Desabilitar a execução do assembly não desabilita a capacidade de criar, alterar ou descartar assemblies. Para obter mais informações, consulte Configuração do servidor: clr habilitado.

Para obter mais informações, confira sp_configure.

Gerenciar versões de assembly

Quando um assembly é carregado em uma instância SQL Server, o assembly é armazenado e gerenciado nos catálogos do sistema de banco de dados. Todas as alterações feitas na definição do assembly no Microsoft .NET Framework devem ser propagadas para o assembly armazenado no catálogo de banco de dados.

Quando você precisa modificar um assembly, deve emitir uma ALTER ASSEMBLY instrução para atualizar o assembly no banco de dados. Essa instrução atualiza o assembly para a cópia mais recente dos módulos do .NET Framework que contêm sua implementação.

A WITH UNCHECKED DATA cláusula da instrução instrui o ALTER ASSEMBLY SQL Server a atualizar até mesmo os assemblies dos quais os dados persistentes no banco de dados dependem. Especificamente, você deve especificar WITH UNCHECKED DATA se existe algum dos seguintes:

  • Colunas computadas persistentes que fazem referência a métodos no assembly, direta ou indiretamente, por meio de funções ou métodos Transact-SQL.

  • Colunas de um tipo CLR definido pelo usuário que dependem do assembly e o tipo implementa um UserDefined formato de (nãoNative) serialização.

Cuidado

Se WITH UNCHECKED DATA não for especificado, o SQL Server tentará impedir ALTER ASSEMBLY a execução se a nova versão do assembly afetar os dados existentes em tabelas, índices ou outros sites persistentes. No entanto, o SQL Server não garante que colunas, índices, exibições indexadas ou expressões computadas sejam consistentes com as rotinas e os tipos subjacentes quando o assembly CLR for atualizado. Tenha cuidado ao executar ALTER ASSEMBLY para garantir que não haja incompatibilidade entre o resultado de uma expressão e um valor baseado nessa expressão armazenada no assembly.

Somente membros da função de banco de dados db_owner e db_ddlowner fixa podem executar ALTER ASSEMBLY usando a WITH UNCHECKED DATA cláusula.

O SQL Server posta uma mensagem no log de eventos do Aplicativo do Windows informando que o assembly foi modificado com dados não verificados nas tabelas. Em seguida, o SQL Server marca todas as tabelas que contêm dados dependentes do assembly como tendo dados não verificados. A has_unchecked_assembly_data coluna da exibição do sys.tables catálogo contém o valor 1 para tabelas que contêm dados não verificados e 0 para tabelas sem dados não verificados.

Para resolver a integridade de dados não verificados, execute DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS em cada tabela que tenha dados não verificados. Se DBCC CHECKDB WITH EXTENDED_LOGICAL_CHECKS falhar, você deverá excluir as linhas da tabela que não são válidas ou modificar o código do assembly para resolver problemas e, em seguida, emitir mais ALTER ASSEMBLY instruções.

ALTER ASSEMBLY Altera a versão do assembly. A cultura e o token de chave pública do assembly permanecem os mesmos. O SQL Server não permite registrar versões diferentes de um assembly com o mesmo nome, cultura e chave pública.

Interações com a política de todo o computador para associação de versão

Se as referências a assemblies armazenados no SQL Server forem redirecionadas para versões específicas usando a política do editor ou a política do administrador em todo o computador, você deverá executar uma das seguintes ações:

  • Verificar se a nova versão para a qual esse redirecionamento é feito está no banco de dados.

  • Modificar qualquer instrução dos arquivos de política externa do computador ou de política de publicador para ter certeza de que fazem referência à versão específica que está no banco de dados.

Caso contrário, uma tentativa de carregar uma nova versão do assembly para a instância do SQL Server falhará.

Para obter mais informações, consulte ALTER ASSEMBLY.