【问题标题】:How do I drop all functions from CLR Assembly before it's drop in SQL Server?在 SQL Server 中删除之前,如何从 CLR 程序集中删除所有函数?
【发布时间】:2016-06-12 02:58:45
【问题描述】:

我收到“删除程序集失败,因为它被对象引用”错误。 据我了解,我需要在删除之前删除所有引用此程序集的函数。 有没有通用的方法可以做到这一点?

【问题讨论】:

    标签: sql-server-2008 .net-assembly universal


    【解决方案1】:

    你需要一个这样的小脚本:

    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;
    

    但是,删除所有程序集的依赖对象是不安全的,所以要小心将被删除的对象。

    【讨论】:

    • 对我来说效果很好!我没有考虑存储过程,但你有。非常感谢!
    • 谢谢,你可能想添加这个。当 o.type='AF' THEN 'AGGREGATE '
    猜你喜欢
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多