Udostępnij za pośrednictwem


Usuwanie zestawu

Dotyczy:programu SQL Server

Zestawy zarejestrowane w programie SQL Server przy użyciu instrukcji CREATE ASSEMBLY można usunąć lub usunąć, gdy udostępniana funkcja nie jest już potrzebna. Usunięcie zestawu spowoduje usunięcie zestawu i wszystkich skojarzonych z nim plików, takich jak pliki debugowania, z bazy danych. Aby usunąć zestaw, użyj instrukcji DROP ASSEMBLY z następującą składnią:

DROP ASSEMBLY MyDotNETAssembly;

DROP ASSEMBLY nie zakłóca żadnego kodu odwołującego się do aktualnie uruchomionego zestawu, ale po wykonaniu DROP ASSEMBLY wszelkie próby wywołania kodu zestawu kończą się niepowodzeniem.

DROP ASSEMBLY zwraca błąd, jeśli zestaw odwołuje się do innego zestawu, który istnieje w bazie danych, lub czy jest używany przez funkcje środowiska uruchomieniowego języka wspólnego (CLR), procedury, wyzwalacze, typy zdefiniowane przez użytkownika (UDT) lub agregacje zdefiniowane przez użytkownika w bieżącej bazie danych. Najpierw użyj instrukcji DROP AGGREGATE, DROP FUNCTION, DROP PROCEDURE, DROP TRIGGERi DROP TYPE, aby usunąć wszystkie zarządzane obiekty bazy danych zawarte w zestawie.

Usuwanie funkcji UDT z bazy danych

Instrukcja DROP TYPE usuwa udT z bieżącej bazy danych. Po usunięciu funkcji UDT można użyć instrukcji DROP ASSEMBLY, aby usunąć zestaw z bazy danych.

Instrukcja DROP TYPE kończy się niepowodzeniem, jeśli obiekty zależą od udT, jak w następujących sytuacjach:

  • Tabele w bazie danych zawierające kolumny zdefiniowane przy użyciu funkcji UDT.

  • Funkcje, procedury składowane lub wyzwalacze, które używają zmiennych lub parametrów udT utworzonych w bazie danych z klauzulą WITH SCHEMABINDING.

Znajdowanie zależności UDT

Najpierw należy usunąć wszystkie obiekty zależne, a następnie wykonać instrukcję DROP TYPE. Poniższe zapytanie Transact-SQL lokalizuje wszystkie kolumny i parametry, które używają funkcji UDT w bazie danych 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;