Partilhar via


Soltar uma montagem

Aplica-se a:SQL Server

Os assemblies registrados no SQL Server usando a instrução CREATE ASSEMBLY podem ser excluídos ou descartados quando a funcionalidade que eles fornecem não for mais necessária. Soltar um assembly remove o assembly e todos os seus arquivos associados, como arquivos de depuração, do banco de dados. Para soltar um assembly, use a instrução DROP ASSEMBLY com a seguinte sintaxe:

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY não interfere com nenhum código referente ao assembly que está sendo executado no momento, mas depois que DROP ASSEMBLY executa, todas as tentativas de invocar o código do assembly falharão.

DROP ASSEMBLY retorna um erro se o assembly for referenciado por outro assembly existente no banco de dados ou se for usado por funções, procedimentos, gatilhos, UDTs (tipos definidos pelo usuário) ou UDAs (agregações definidas pelo usuário) no banco de dados atual. Primeiro, use as instruções DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, DROP TRIGGERe DROP TYPE para excluir quaisquer objetos de banco de dados gerenciados contidos no assembly.

Remover um UDT do banco de dados

A instrução DROP TYPE remove um UDT do banco de dados atual. Depois que um UDT é descartado, você pode usar a instrução DROP ASSEMBLY para descartar o assembly do banco de dados.

A instrução DROP TYPE falhará se os objetos dependerem do UDT, como nas seguintes situações:

  • Tabelas no banco de dados que contêm colunas definidas usando o UDT.

  • Funções, procedimentos armazenados ou gatilhos que usam variáveis ou parâmetros do UDT, criados no banco de dados com a cláusula WITH SCHEMABINDING.

Localizar dependências UDT

Você deve primeiro descartar todos os objetos dependentes e, em seguida, executar a instrução DROP TYPE. A consulta Transact-SQL a seguir localiza todas as colunas e parâmetros que usam um UDT no banco de dados AdventureWorks2022.

USE Adventureworks2022;
GO

SELECT o.name AS major_name,
       o.type_desc AS major_type_desc,
       c.name AS minor_name,
       c.type_desc AS minor_type_desc,
       at.assembly_class
FROM (SELECT object_id,
             name,
             user_type_id,
             'SQL_COLUMN' AS type_desc
      FROM sys.columns
      UNION ALL
      SELECT object_id,
             name,
             user_type_id,
             'SQL_PROCEDURE_PARAMETER'
      FROM sys.parameters) AS c
     INNER JOIN sys.objects AS o
         ON o.object_id = c.object_id
     INNER JOIN sys.assembly_types AS at
         ON at.user_type_id = c.user_type_id;