代码之家  ›  专栏  ›  技术社区  ›  jophab

无法删除函数,因为它正被对象引用

  •  -1
  • jophab  · 技术社区  · 8 年前

    Msg 3729, Level 16, State 1, Line 13
    Cannot DROP FUNCTION 'dbo.testfn2' because it is being referenced by object 'testtable2'.
    
    Msg 3729, Level 16, State 1, Line 14
    Cannot DROP FUNCTION 'dbo.testfn' because it is being referenced 
    by object 'DF__testtable__idc__5CD6CB2B'.
    

    这个错误的一个原因是 默认约束

    我尝试删除所有默认约束。

    但还有其他原因。

    2 回复  |  直到 8 年前
        1
  •  4
  •   Paweł Dyl    8 年前

    显示可以使用的依赖项 sp_depends 程序:

    exec sp_depends 'dbo.YourFunc'
    

    或者,打电话 sys.dm_sql_referencing_entities

    SELECT * FROM sys.dm_sql_referencing_entities('dbo.YourFunc','OBJECT')
    
        2
  •  1
  •   jophab    8 年前

    我的情况有两种情况。指定的函数由使用

    1. A Column for its default value
    2. A Computed Column for its value calculation
    

    案例1:

     SELECT * FROM sys.default_constraints
    

    ALTER TABLE tableName DROP CONSTRAINT DF__tableName_ConstraintName
    

    删除此函数作为默认约束的所有用法后,我们可以通过

    DROP FUNCTION schemaName.fnName 
    

    我们可以从sys.u列

     SELECT * FROM sys.computed_columns 
    

    出于我的目的,可以删除使用指定函数的计算列。

    我们可以顺便拜访一下

    ALTER TABLE schema.tableName DROP COLUMN columnName