Dela via


Släppa en sammansättning

gäller för:SQL Server

Sammansättningar som är registrerade i SQL Server med hjälp av CREATE ASSEMBLY-instruktionen kan tas bort eller tas bort när de funktioner som de tillhandahåller inte längre behövs. Om du tar bort en sammansättning tar du bort sammansättningen och alla dess associerade filer, till exempel felsökningsfiler, från databasen. Om du vill släppa en sammansättning använder du instruktionen DROP ASSEMBLY med följande syntax:

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY stör inte någon kod som refererar till sammansättningen som körs för närvarande, men när DROP ASSEMBLY körs misslyckas alla försök att anropa sammansättningskoden.

DROP ASSEMBLY returnerar ett fel om sammansättningen refereras av en annan sammansättning som finns i databasen, eller om den används av CLR-funktioner (Common Language Runtime), procedurer, utlösare, användardefinierade typer (UDT) eller användardefinierade aggregeringar (UDA) i den aktuella databasen. Använd först instruktionerna DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, DROP TRIGGERoch DROP TYPE för att ta bort alla hanterade databasobjekt som ingår i sammansättningen.

Ta bort en UDT från databasen

Instruktionen DROP TYPE tar bort en UDT från den aktuella databasen. När en UDT har tagits bort kan du använda instruktionen DROP ASSEMBLY för att släppa sammansättningen från databasen.

Instruktionen DROP TYPE misslyckas om objekt är beroende av UDT, som i följande situationer:

  • Tabeller i databasen som innehåller kolumner som definierats med UDT.

  • Funktioner, lagrade procedurer eller utlösare som använder variabler eller parametrar i UDT, som skapats i databasen med WITH SCHEMABINDING-satsen.

Hitta UDT-beroenden

Du måste först släppa alla beroende objekt och sedan köra instruktionen DROP TYPE. Följande Transact-SQL fråga letar upp alla kolumner och parametrar som använder en UDT i AdventureWorks2022-databasen.

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;