我收到“投递装配失败,因为它被对象引用”错误。据我了解,我需要在删除该程序集之前删除所有引用到该程序集的功能。有什么通用的方法吗?
您将需要一个像这样的小脚本:
DECLARE @sql NVARCHAR(MAX) = N''; DECLARE @assembly_name NVARCHAR(MAX)='assembly' SELECT @sql += ' DROP ' + CASE WHEN o.type='PC' THEN 'PROCEDURE ' ELSE 'FUNCTION ' END + QUOTENAME(o.Name) + ';' FROM Sys.Assemblies asm INNER JOIN SYS.ASSEMBLY_MODULES m ON asm.assembly_id=m.assembly_id INNER JOIN SYS.OBJECTS o ON m.object_id = o.object_id WHERE asm.name=@assembly_name SET @sql=@sql+' DROP ASSEMBLY '+QUOTENAME(@assembly_name) PRINT @sql; EXEC sp_executesql @sql;
但是,删除所有程序集的从属对象并不安全,因此请注意将其删除。