适用范围:SQL Server
当不再需要它们提供的功能时,可以使用 CREATE ASSEMBLY
语句在 SQL Server 中注册的程序集被删除或删除。 删除程序集时,将从数据库中删除程序集和它的所有关联文件,如调试文件。 若要删除程序集,请使用具有以下语法的 DROP ASSEMBLY
语句:
DROP ASSEMBLY MyDotNETAssembly;
DROP ASSEMBLY
不会干扰引用当前正在运行的程序集的任何代码,但在执行 DROP ASSEMBLY
后,任何调用程序集代码的尝试都会失败。
如果程序集由数据库中存在的另一个程序集引用,或者公共语言运行时(CLR)函数、过程、触发器、用户定义的类型(UDT)或当前数据库中的用户定义聚合(UDA)使用,则 DROP ASSEMBLY
返回错误。 首先使用 DROP AGGREGATE
、DROP FUNCTION
、DROP PROCEDURE
、DROP TRIGGER
和 DROP TYPE
语句删除程序集中包含的任何托管数据库对象。
从数据库中删除 UDT
DROP TYPE
语句从当前数据库中删除 UDT。 删除 UDT 后,可以使用 DROP ASSEMBLY
语句从数据库中删除程序集。
如果对象依赖于 UDT,DROP TYPE
语句将失败,如以下情况所示:
数据库中的表包含使用 UDT 定义的列。
使用
WITH SCHEMABINDING
子句在数据库中创建的 UDT 变量或参数的函数、存储过程或触发器。
查找 UDT 依赖项
必须先删除所有依赖对象,然后执行 DROP TYPE
语句。 以下 Transact-SQL 查询查找 AdventureWorks2022
数据库中使用 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;