Condividi tramite


Eliminare un assembly

Si applica a:SQL Server

Gli assembly registrati in SQL Server tramite l'istruzione CREATE ASSEMBLY possono essere eliminati o eliminati quando la funzionalità fornita non è più necessaria. L'eliminazione di un assembly ne comporta la rimozione insieme a tutti i file associati, ad esempio i file di debug, dal database. Per eliminare un assembly, usare l'istruzione DROP ASSEMBLY con la sintassi seguente:

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY non interferisce con alcun codice che fa riferimento all'assembly attualmente in esecuzione, ma dopo l'esecuzione di DROP ASSEMBLY, eventuali tentativi di richiamare il codice dell'assembly hanno esito negativo.

DROP ASSEMBLY restituisce un errore se l'assembly fa riferimento a un altro assembly presente nel database o se viene usato da funzioni CLR (Common Language Runtime), procedure, trigger, tipi definiti dall'utente o aggregazioni definite dall'utente nel database corrente. Usare prima di tutto le istruzioni DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, DROP TRIGGERe DROP TYPE per eliminare tutti gli oggetti di database gestiti contenuti nell'assembly.

Rimuovere un tipo definito dall'utente dal database

L'istruzione DROP TYPE rimuove un tipo definito dall'utente dal database corrente. Una volta eliminato un tipo definito dall'utente, è possibile usare l'istruzione DROP ASSEMBLY per eliminare l'assembly dal database.

L'istruzione DROP TYPE ha esito negativo se gli oggetti dipendono dal tipo definito dall'utente, come nelle situazioni seguenti:

  • Tabelle del database che contengono colonne definite mediante il tipo definito dall'utente (UDT).

  • Funzioni, stored procedure o trigger che usano variabili o parametri del tipo definito dall'utente, creati nel database con la clausola WITH SCHEMABINDING.

Trovare le dipendenze del tipo definito dall'utente

È innanzitutto necessario eliminare tutti gli oggetti dipendenti e quindi eseguire l'istruzione DROP TYPE. La query di Transact-SQL seguente individua tutte le colonne e i parametri che usano un tipo definito dall'utente nel database 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;