如何在 CLR 程序集放入 SQL 服务器之前删除所有函数?

How do I drop all functions from CLR Assembly before it's drop in SQL Server?

我收到 'drop assembly failed because it is referenced by object' 错误。 据我了解,我需要在删除之前删除所有引用该程序集的函数。 有什么通用的方法吗?

您需要这样的小脚本:

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;

但是,删除程序集的所有依赖对象并不安全,因此请注意要删除的内容。