Поделиться через


Удаление сборки

Область применения: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;