Как обновить определение пользовательской функции T-SQL после переопределения зависимого объекта?
Рассмотрим следующую последовательность событий:
- вид v_Foo определен
- определена пользовательская функция GetFoo (), которая включает все столбцы из v_Foo (с помощью 'Select * ...')
- определение v_Foo изменяется и теперь включает больше столбцов
- Теперь я хочу, чтобы GetFoo () включил новые столбцы в v_Foo, но он по-прежнему ссылается на старое определение
Я могу просто повторно запустить скрипт, который создал GetFoo в первую очередь, и все будет хорошо; но это проблематично по причинам, в которые я не буду вдаваться. Существует ли какой-либо другой способ обновить определение определяемой пользователем функции, чтобы она синхронизировалась со своими зависимыми объектами?
2 ответа:
Короткий и простой ответ: Нет .
Вы должны переопределить
Но есть способ обойти его (переводится как непрактичный).RETURN TABLE
заявление в табличной пользовательской функцииGetFoo()
всякий раз, когда определениеv_Foo
изменяется.
- создайте триггер
DDL
наALTER_VIEW
событие.- затем используйте динамический SQL для создания
GetFoo()
.
Было бы неплохо посмотреть определение функции. Все, что вы сказали, это использование SELECT *. Вы можете быть более конкретным?
Вы также забыли сообщить нам, какую версию SQL Server вы используете. If >= 2005, вы смотрели на sp_refreshsqlmodule? http://technet.microsoft.com/en-us/library/bb326754.aspx http://technet.microsoft.com/en-us/library/bb326754%28SQL.90%29.aspx
Любопытно, какие у вас причины настаивать на SELECT *. Множество дискуссия об этом здесь, но минусы все равно перевешивают плюсы с большим отрывом, ИМХО: