尝试删除一些用户定义函数时遇到此错误。
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'.
此错误的一个原因是 一些列在其默认约束中使用了该功能。
我尝试删除所有默认约束。
但是除此之外还有其他原因。
还有其他可能性吗?
答案 0 :(得分:4)
要显示依赖性,可以使用sp_depends
过程:
exec sp_depends 'dbo.YourFunc'
或者,调用sys.dm_sql_referencing_entities表值函数:
SELECT * FROM sys.dm_sql_referencing_entities('dbo.YourFunc','OBJECT')
答案 1 :(得分:0)
我的情况有两种情况。指定的功能由
使用1. A Column for its default value
2. A Computed Column for its value calculation
案例1:
可以从sys.default_constraints中查看默认约束
SELECT * FROM sys.default_constraints
我们可以删除默认约束
ALTER TABLE tableName DROP CONSTRAINT DF__tableName_ConstraintName
在删除此函数的所有用法作为默认约束之后,我们可以删除该函数
DROP FUNCTION schemaName.fnName
案例2:
我们可以从sys.computed_columns中看到计算出的列
SELECT * FROM sys.computed_columns
出于我的目的,可以删除使用指定功能的计算列。
我们可以删除列
ALTER TABLE schema.tableName DROP COLUMN columnName
使用此函数删除所有计算出的列后,我们可以像之前一样删除它。