Sdílet prostřednictvím


Vyřazení sestavení

platí pro:SQL Server

Sestavení zaregistrovaná v SQL Serveru pomocí příkazu CREATE ASSEMBLY je možné odstranit nebo odstranit, pokud už funkce, které poskytují, už nejsou potřeba. Vyřazení sestavení odebere sestavení a všechny jeho přidružené soubory, jako jsou například ladicí soubory, z databáze. K vyřazení sestavení použijte příkaz DROP ASSEMBLY s následující syntaxí:

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY nenaruší žádný kód odkazující na sestavení, které je aktuálně spuštěné, ale po spuštění DROP ASSEMBLY všechny pokusy o vyvolání kódu sestavení selžou.

DROP ASSEMBLY vrátí chybu, pokud je na sestavení odkazováno jiným sestavením, které existuje v databázi, nebo pokud se používá funkcemi CLR (Common Language Runtime), procedurami, triggery, uživatelsky definovanými typy (UDT) nebo uživatelsky definovanými agregacemi (UDA) v aktuální databázi. Nejprve pomocí příkazů DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, DROP TRIGGERa DROP TYPE odstraňte všechny spravované databázové objekty obsažené v sestavení.

Odebrání UDT z databáze

Příkaz DROP TYPE odebere UDT z aktuální databáze. Po vyřazení UDT můžete použít příkaz DROP ASSEMBLY k vyřazení sestavení z databáze.

Příkaz DROP TYPE selže, pokud objekty závisí na UDT, jako v následujících situacích:

  • Tabulky v databázi, které obsahují sloupce definované pomocí UDT.

  • Funkce, uložené procedury nebo triggery, které používají proměnné nebo parametry UDT vytvořené v databázi pomocí klauzule WITH SCHEMABINDING.

Vyhledání závislostí UDT

Nejprve musíte odstranit všechny závislé objekty a pak spustit příkaz DROP TYPE. Následující Transact-SQL dotaz vyhledá všechny sloupce a parametry, které v databázi AdventureWorks2022 používají UDT.

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;