Implementando assemblies

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

  • Criando assemblies

  • Modificando assemblies

  • Descartando, desabilitando e habilitando assemblies

  • Gerenciando versões de assembly

Criando 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 Assembly Assisted Editor. Além disso, a implementação de um SQL Server Project no MicrosoftVisual Studio registra um assembly no banco de dados que foi especificado para o projeto. Para obter mais informações, consulte Implantando objetos de banco de dados CLR.

Para criar um assembly usando o Transact-SQL

Para criar um assembly usando o SQL Server Management Studio

Modificando assemblies

Os assemblies são modificados no SQL Server usando a instrução ALTER ASSEMBLY Transact-SQL ou no SQL Server Management Studio usando o Assembly Assisted Editor. Você pode modificar um assembly quando quiser fazer o seguinte:

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

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

  • Altere a visibilidade do assembly. Assemblies visíveis estão disponíveis para consulta no SQL Server. Assemblies não visíveis não estão disponíveis, mesmo se tiverem sido carregados no banco de dados. Por padrão, os assemblies carregados para uma instância do SQL Server são visíveis.

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

Para modificar um assembly usando o Transact-SQL

Para modificar um assembly usando o SQL Server Management Studio

Descartando, desabilitando e habilitando assemblies

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

Para descartar um assembly usando o Transact-SQL

Para descartar um assembly usando o SQL Server Management Studio

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

Para desabilitar e habilitar a execução de assemblies

Gerenciando versões de assembly

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

Quando for preciso modificar um assembly, você deverá emitir uma instrução ALTER ASSEMBLY para atualizar o assembly no banco de dados. Isso atualizará o assembly até a última cópia de módulos do .NET Framework que contenha sua implementação.

A cláusula WITH UNCHECKED DATA da instrução ALTER ASSEMBLY instrui o SQL Server para atualizar até mesmo os assemblies dos quais os dados persistentes no banco de dados sejam dependentes. Especificamente, você deve especificar WITH UNCHECKED DATA se qualquer uma dessas opções existir:

  • Colunas computadas persistentes que referenciem métodos no assembly, seja direta ou indiretamente, através de funções ou métodos Transact-SQL.

  • Colunas de tipo de dados CLR definido pelo usuário que dependam do assembly, sendo que o tipo implementa um formato de serialização UserDefined (não-Native).

Observação sobre cuidadosCuidado

Se WITH UNCHECKED DATA não for especificado, o SQL Server tentará impedir que ALTER ASSEMBLY seja executada se a nova versão do assembly afetar dados existentes em tabelas, índices ou outros locais persistentes. Porém, o SQL Server não garante que colunas computadas, índices, exibições indexadas ou expressões sejam consistentes com as rotinas e tipos subjacentes quando o assembly CLR for atualizado. Tenha cuidado ao executar ALTER ASSEMBLY, para ter certeza de que não haja nenhuma desigualdade entre o resultado de uma expressão e um valor que é baseado naquela expressão armazenado no assembly.

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

O SQL Server publica uma mensagem no log de eventos de aplicativos do Windows informando que o assembly foi modificado com dados não verificados nas tabelas. O SQL Server então marca qualquer tabela que contenha dados dependentes do assembly como tendo dados não verificados. A coluna has_unchecked_assembly_data da exibição de catálogo sys.tables contém o valor 1 para tabelas que contenham dados não verificados e 0 para tabelas sem dados não verificados.

Para resolver a integridade de dados não verificados, execute DBCC CHECKTABLE em cada tabela que tiver dados não verificados. Se DBCC CHECKTABLE falhar, você terá de excluir as linhas da tabela que não sejam válidas ou modificar o código do assembly para tratar de problemas e, em seguida, emitir instruções ALTER ASSEMBLY adicionais.

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 computadores para associação de versões

Se as referências a assemblies armazenadas no SQL Server forem redirecionadas a versões específicas usando política de publicador ou política de administrador de computadores, você deve agir de uma das seguintes maneiras:

  • 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 para carregar uma nova versão de assembly à instância do SQL Server falhará.

Para atualizar a versão de um assembly