Невозможно DROP FUNCTION, потому что на него ссылается объект - PullRequest
0 голосов
/ 07 сентября 2018

Я получил эту ошибку при попытке удалить некоторые пользовательские функции.

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 ]

0 голосов
/ 07 сентября 2018

Для отображения зависимостей вы можете использовать sp_depends процедуру:

exec sp_depends 'dbo.YourFunc'

Или вызовите sys.dm_sql_referencing_entities табличная функция:

SELECT * FROM sys.dm_sql_referencing_entities('dbo.YourFunc','OBJECT')
0 голосов
/ 07 сентября 2018

В моем случае было два сценария. Указанные функции были использованы

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

После удаления всех вычисляемых столбцов с помощью этой функции мы можем отбросить ее, как делали ранее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...