Удаление сборки
Область применения:SQL Server
Сборки, зарегистрированные в SQL Server с помощью инструкции CREATE ASSEMBLY
, можно удалить или удалить, если предоставляемые функции больше не требуются. При удалении сборки из базы данных удаляются и все связанные с ней файлы, такие как файлы отладки. Чтобы удалить сборку, используйте инструкцию DROP ASSEMBLY
со следующим синтаксисом:
DROP ASSEMBLY MyDotNETAssembly;
DROP ASSEMBLY
не вмешивается в какой-либо код, ссылающийся на сборку, которая в настоящее время выполняется, но после выполнения DROP ASSEMBLY
все попытки вызова кода сборки завершаются ошибкой.
DROP ASSEMBLY
возвращает ошибку, если сборка ссылается на другую сборку, которая существует в базе данных, или если она используется функциями среды CLR, процедурами, триггерами, определяемыми пользователем типами (определяемыми пользователем) или определяемыми пользователем агрегатами (UDAs) в текущей базе данных. Сначала используйте инструкции DROP AGGREGATE
, DROP FUNCTION
, DROP PROCEDURE
, DROP TRIGGER
и DROP TYPE
для удаления всех объектов управляемой базы данных, содержащихся в сборке.
Удаление определяемого пользователем набора данных из базы данных
Инструкция DROP TYPE
удаляет UDT из текущей базы данных. После удаления определяемого пользователем объекта можно использовать инструкцию DROP ASSEMBLY
для удаления сборки из базы данных.
Оператор DROP TYPE
завершается ошибкой, если объекты зависят от определяемого пользователем типа, как в следующих ситуациях:
Таблицы в базе данных, которые содержат столбцы, определенные с помощью определяемого пользователем типа.
Функции, хранимые процедуры или триггеры, использующие переменные или параметры определяемого пользователем типа, созданные в базе данных с предложением
WITH SCHEMABINDING
.
Поиск зависимостей UDT
Сначала необходимо удалить все зависимые объекты, а затем выполнить инструкцию DROP TYPE
. Следующий запрос Transact-SQL находит все столбцы и параметры, использующие UDT в базе данных 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;