Как обновить определение пользовательской функции T-SQL после переопределения зависимого объекта? - PullRequest
2 голосов
/ 15 ноября 2009

Рассмотрим следующую последовательность событий:

  1. Вид v_Foo определен
  2. Определяется пользовательская функция GetFoo (), которая включает в себя все столбцы из v_Foo (используя 'Select * ...')
  3. Определение v_Foo изменяется и теперь включает больше столбцов
  4. Теперь я хочу, чтобы GetFoo () включил новые столбцы в v_Foo, но он все еще ссылается на старое определение

Я могу просто заново запустить скрипт, который создал GetFoo, и все будет хорошо; но это проблематично по причинам, в которые я не буду вдаваться. Есть ли другой способ обновить определение пользовательской функции, чтобы она синхронизировалась с зависимыми объектами?

Ответы [ 2 ]

4 голосов
/ 15 ноября 2009

Короткий, простой ответ: Нет .

Вы должны переопределить оператор RETURN TABLE в табличной UDF, GetFoo()
всякий раз, когда определение v_Foo изменяется.

Но есть способ обойти это (переводится как непрактичный).

  1. Создание триггера DDL для события ALTER_VIEW.
  2. Затем используйте динамический SQL для создания GetFoo().
2 голосов
/ 16 ноября 2009

Было бы неплохо увидеть определение функции. Все, что вы сказали, это использование SELECT *. Можете ли вы быть более конкретным?

Вы также забыли сообщить нам, какую версию SQL Server вы используете. Если> = 2005, вы смотрели на sp_refreshsqlmodule?

Любопытно, каковы ваши причины настаивать на SELECT *. Здесь много дискуссий, но минусы все еще перевешивают плюсы с большим отрывом, ИМХО:

...