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 TRIGGER
i 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;