Compartir a través de


Quitar un ensamblado

Se aplica a:SQL Server

Los ensamblados registrados en SQL Server mediante la instrucción CREATE ASSEMBLY se pueden eliminar o quitar cuando la funcionalidad que proporcionan ya no es necesaria. Cuando se quita un ensamblado se quita el propio ensamblado y todos sus archivos asociados, como los archivos de depuración, de la base de datos. Para quitar un ensamblado, use la instrucción DROP ASSEMBLY con la sintaxis siguiente:

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY no interfiere con ningún código que haga referencia al ensamblado que se está ejecutando actualmente, pero después de ejecutar DROP ASSEMBLY, se producirá un error en los intentos de invocar el código de ensamblado.

DROP ASSEMBLY devuelve un error si se hace referencia al ensamblado por otro ensamblado que existe en la base de datos o si lo usan las funciones, procedimientos, desencadenadores, tipos definidos por el usuario (UDT) o agregados definidos por el usuario (UDF) en la base de datos actual. En primer lugar, use las instrucciones DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, DROP TRIGGERy DROP TYPE para eliminar los objetos de base de datos administrados incluidos en el ensamblado.

Quitar un UDT de la base de datos

La instrucción DROP TYPE quita un UDT de la base de datos actual. Una vez que se quita un UDT, puede usar la instrucción DROP ASSEMBLY para quitar el ensamblado de la base de datos.

Se produce un error en la instrucción DROP TYPE si los objetos dependen del UDT, como en las situaciones siguientes:

  • Tablas de la base de datos que contienen columnas definidas mediante el UDT.

  • Funciones, procedimientos almacenados o desencadenadores que usan variables o parámetros del UDT, creados en la base de datos con la cláusula WITH SCHEMABINDING.

Búsqueda de dependencias udT

Primero debe quitar todos los objetos dependientes y, a continuación, ejecutar la instrucción DROP TYPE. La siguiente consulta Transact-SQL busca todas las columnas y parámetros que usan un UDT en la base de datos de 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;