ALTER ASSEMBLY (Transact-SQL)

Altera um assembly pela modificação das propriedades do catálogo do SQL Server de um assembly. ALTER ASSEMBLY o atualiza para a cópia mais recente dos módulos do Microsoft .NET Framework que contêm sua implementação e adiciona ou remove arquivos associados a ele. Os assemblies são criados usando CREATE ASSEMBLY.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

ALTER ASSEMBLY assembly_name
    [ FROM <client_assembly_specifier> | <assembly_bits> ]
    [ WITH <assembly_option> [ ,...n ] ]
    [ DROP FILE { file_name [ ,...n ] | ALL } ]
    [ ADD FILE FROM 
    { 
                client_file_specifier [ AS file_name ] 
      | file_bits AS file_name 
    } [,...n ] 
    ] [ ; ]
<client_assembly_specifier> :: ='\\computer_name\share-name\[path\]manifest_file_name'
  | '[local_path\]manifest_file_name'<assembly_bits> :: =
    { varbinary_literal | varbinary_expression }

<assembly_option> :: =
    PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE } 
  | VISIBILITY = { ON | OFF }
  | UNCHECKED DATA

Argumentos

  • assembly_name
    É o nome do assembly que você deseja modificar. assembly_name já deve existir no banco de dados.

  • FROM <client_assembly_specifier> | <assembly_bits>
    Atualiza um assembly à cópia mais recente dos módulos do .NET Framework que contêm sua implementação. Esta opção pode ser usada somente se não houver nenhum arquivo associado ao assembly especificado.

    <client_assembly_specifier> especifica a localidade de rede ou local onde o assembly que está sendo atualizado fica situado. A localidade de rede inclui o nome do computador, o nome do compartilhamento e um caminho nesse compartilhamento. manifest_file_name especifica o nome do arquivo que contém o manifesto do assembly.

    <assembly_bits> é o valor binário do assembly.

    Devem ser emitidas instruções ALTER ASSEMBLY separadas para qualquer assembly dependente que também requeira atualização.

  • PERMISSION_SET = { SAFE | EXTERNAL_ACCESS | UNSAFE }
    Especifica a propriedade do conjunto de permissões de acesso ao código do .NET Framework do assembly. Para obter mais informações sobre essa propriedade, consulte CREATE ASSEMBLY (Transact-SQL).

  • VISIBILITY = { ON | OFF }
    Indica se o assembly está visível para a criação de funções CLR (Common Language Runtime), procedimentos armazenados, disparadores, tipos de dados definidos pelo usuário e funções de agregação definidas pelo usuário em relação a ele. Se for definido como OFF, o assembly foi projetado para ser chamado somente por outros assemblies. Se houver objetos de banco de dados CLR existentes já criados em relação ao assembly, a visibilidade do assembly não poderá ser alterada. Quaisquer assemblies referenciados por assembly_name serão carregados como não visíveis por padrão.

  • UNCHECKED DATA
    Por padrão, ALTER ASSEMBLY falhará se deve verificar a consistência de linhas de tabela individuais. Esta opção permite adiar as verificações com o uso de DBCC CHECKTABLE. Se for especificada, o SQL Server executará a instrução ALTER ASSEMBLY mesmo se houver tabelas no banco de dados que contenham o seguinte:

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

    • Restrições CHECK que referenciam métodos no assembly direta ou indiretamente.

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

    • Colunas de um tipo CLR definido pelo usuário que fazem referência a exibições criadas com o uso de WITH SCHEMABINDING.

    Se quaisquer restrições CHECK estiverem presentes, elas serão desabilitadas e marcadas como não confiáveis. Quaisquer tabelas que contenham colunas dependentes do assembly serão marcadas como contendo dados não verificados até que essas tabelas sejam verificadas explicitamente.

    Somente membros das funções de banco de dados fixas db_owner e db_ddlowner podem especificar esta opção.

    Para obter mais informações, consulte Implementando assemblies.

  • [ DROP FILE { file_name[ ,...n] | ALL } ]
    Remove do banco de dados o nome de arquivo associado ao assembly ou todos os arquivos associados ao assembly. Se for usado com ADD FILE a seguir, DROP FILE será executado em primeiro lugar. Isto permite que você substitua um arquivo com o mesmo nome de arquivo.

  • [ ADD FILE FROM { client_file_specifier [ AS file_name] | file_bitsAS file_name}
    Carrega um arquivo no servidor a ser associado ao assembly, tais como código fonte, arquivos de depuração ou outras informações relacionadas, e o torna visível na exibição de catálogo sys.assembly_files. client_file_specifier especifica o local a partir do qual o arquivo será carregado. file_bits pode ser usado em seu lugar para especificar a lista de valores binários que compõem o arquivo. file_name especifica o nome sob o qual o arquivo deve ser restaurado na instância do SQL Server. file_name deverá ser especificado se file_bits o for, e será opcional se client_file_specifier for especificado. Se file_name não for especificado, a parte file_name de client_file_specifier será usada como file_name.

Comentários

ALTER ASSEMBLY não interrompe sessões que estejam atualmente em execução com código no assembly que está sendo modificado. As sessões atuais concluem a execução usando os bits inalterados do assembly.

Se a cláusula FROM for especificada, ALTER ASSEMBLY atualizará o assembly com relação às cópias mais recentes dos módulos fornecidos. Como pode haver funções CLR, procedimentos armazenados, disparadores, tipos de dados e funções de agregação definidas pelo usuário na instância do SQL Server que já estejam definidos em relação ao assembly, a instrução ALTER ASSEMBLY os reassocia à implementação mais recente do assembly. Para realizar essa nova associação, os métodos mapeados para funções CLR, procedimentos armazenados e disparadores ainda deverão existir no assembly modificado com as mesmas assinaturas. As classes que implementam tipos CLR definidos pelo usuário e funções de agregação definidas pelo usuário ainda deverão satisfazer os requisitos para serem uma agregação ou tipo definido pelo usuário.

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. Entretanto, o SQL Server não garante que colunas computadas, índices, exibições indexadas ou expressões serão 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 uma incompatibilidade entre o resultado de uma expressão e um valor com base nessa expressão armazenado no assembly.

ALTER ASSEMBLY altera a versão do assembly. A cultura e o token de chave pública do assembly permanecem os mesmos.

A instrução ALTER ASSEMBLY não pode ser usada para alterar o seguinte:

  • As assinaturas de funções CLR, funções de agregação, procedimentos armazenados e disparadores em uma instância do SQL Server que façam referência ao assembly. ALTER ASSEMBLY falha quando o SQL Server não puder reassociar objetos de banco de dados .NET Framework no SQL Server com a nova versão do assembly.

  • As assinaturas de métodos no assembly que são chamados a partir de outros assemblies.

  • A lista de assemblies que dependem do assembly, como referenciados na propriedade DependentList do assembly.

  • A capacidade de indexação de um método, a menos que não existam índices ou colunas computadas persistidas que dependam desse método, seja direta ou indiretamente.

  • O atributo de nome do método FillRow para funções CLR com valor de tabela.

  • A assinatura do método Accumulate e Terminate para agregações definidas pelo usuário.

  • Assemblies do sistema.

  • Propriedade do assembly. Em vez disso, use ALTER AUTHORIZATION (Transact-SQL).

Além disso, para assemblies que implementam tipos definidos pelo usuário, ALTER ASSEMBLY pode ser usada para fazer somente as seguintes alterações:

  • Modificar métodos públicos da classe de tipo definida pelo usuário, contanto que não sejam alterados assinaturas ou atributos.

  • Adicionar novos métodos públicos.

  • Modificar métodos privados de alguma forma.

Os campos contidos em um tipo definido pelo usuário serializado nativo, incluindo membros de dados ou classes base, não podem ser alterados com o uso de ALTER ASSEMBLY. Não é oferecido suporte a todas as demais alterações.

Se ADD FILE FROM não for especificado, ALTER ASSEMBLY descartará quaisquer arquivos associados ao assembly.

Se ALTER ASSEMBLY for executado sem a cláusula de dados UNCHECKED, serão executadas verificações para averiguar se a nova versão do assembly não afeta dados existentes em tabelas. Dependendo da quantidade de dados que precisa ser verificada, isso pode afetar o desempenho.

Permissões

Requer permissão ALTER no assembly. Os requisitos adicionais são os seguintes:

  • Para alterar um assembly cujo conjunto de permissões existente seja EXTERNAL_ACCESS, o logon do SQL Server deve ter permissão EXTERNAL ACCESS no servidor.

  • Para alterar um assembly cujo conjunto de permissões existente seja UNSAFE, requer associação na função de servidor fixa sysadmin.

  • Para alterar o conjunto de permissões de um assembly para EXTERNAL_ACCESS, o logon do SQL Server deve ter permissão EXTERNAL ACCESS ASSEMBLY no servidor.

  • Para alterar o conjunto de permissões de um assembly para UNSAFE, requer associação na função de servidor fixa sysadmin.

  • A especificação de WITH UNCHECKED DATA requer associação na função de servidor fixa sysadmin.

Para obter mais informações sobre conjuntos de permissões de assembly, consulte Criando assemblies.

Exemplos

A. Atualizando um assembly

O exemplo a seguir atualiza o assembly ComplexNumber à cópia mais recente dos módulos do .NET Framework que contêm sua implementação.

ObservaçãoObservação

O assembly ComplexNumber pode ser criado com a execução dos scripts de exemplo UserDefinedDataType. Para obter mais informações, consulte Considerações para instalar exemplos e bancos de dados de exemplo do SQL Server.

ALTER ASSEMBLY ComplexNumber

FROM 'C:\Program Files\Microsoft SQL Server\90\Tools\Samples\1033\Engine\Programmability\CLR\UserDefinedDataType\CS\ComplexNumber\obj\Debug\ComplexNumber.dll'

B. Adicionando um arquivo a ser associado a um assembly

O exemplo a seguir carrega o arquivo de código fonte Class1.cs a ser associado ao assembly MyClass. Este exemplo assume que o assembly MyClass já foi criado no banco de dados.

ALTER ASSEMBLY MyClass 
ADD FILE FROM 'C:\MyClassProject\Class1.cs';

C. Alterando as permissões de um assembly

O exemplo a seguir altera o conjunto de permissões do assembly ComplexNumber de SAFE para EXTERNAL ACCESS.

ALTER ASSEMBLY ComplexNumber WITH PERMISSION_SET = EXTERNAL_ACCESS