SqlServer2008 - Могу я Изменять Скалярную функцию, в то время как на нее ссылаются во многих местах

У нас есть скалярная функция, которая возвращает DateTime. Это работает, несколько быстрых таблиц выбирают для получения ее возвращаемого значения. Эта функция уже используется всюду по базе данных - в ограничениях по умолчанию, сохранил procs, и т.д. Я хотел бы изменить реализацию функции (чтобы удалить хиты таблицы и сделать это более эффективным), но по-видимому я не могу сделать этого, в то время как на нее ссылаются другие объекты в базе данных. Я должен буду на самом деле обновить или отбросить каждый объект в базе данных, которая ссылается на него, обновите функцию и затем обновите или воссоздайте все те объекты восстановить ссылку на функцию?
На функцию ссылаются горстка представлений, триггеров, несколько функций и большое количество ограничений по умолчанию и хранят procs.

Спасибо за любое понимание можно дать.

Ошибка, которую я получаю, когда я пытаюсь или Изменить или Отбросить функцию:

Не может [ФУНКЦИЯ ALTER|DROP] 'dbo. GetClientCurrentTime', потому что на это ссылается объект 'DF_tbl_PatientOrder_Note_RecordCreated'.

10
задан Casey C. 30 April 2010 в 18:37
поделиться

2 ответа

Это зависит от обстоятельств. Если объекты, ссылающиеся на функцию, имеют параметр WITH SCHEMABINDING , то вам будет явно запрещено вмешиваться в эту функцию. В противном случае единственным ограничением является обычное ограничение блокировки доступа DDL, то есть планы в исполнении, которые используют эту функцию, будут устанавливать блокировки стабильности схемы на функцию, и это заблокирует ваши операторы ALTER FUNCTION, поскольку они требуют блокировки изменения схемы. Но это разрешится само по себе, когда планы завершатся.

2
ответ дан 4 December 2019 в 04:53
поделиться

Если входные параметры и тип вывода не изменились, вы сможете вносить любые внутренние изменения, которые вам нужно сделать, не вызывая никаких проблем.

-1
ответ дан 4 December 2019 в 04:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: