Скалярна функція, що використовується в обчисленому стовпчику, який найчистіший спосіб оновити функцію?


10

Я хочу оновити скалярну функцію в нашій базі даних. Ця функція використовується для декількох обчислених стовпців у ключовій таблиці, тому я отримую помилку залежності, якщо намагаюся її оновити. Я можу явно видалити стовпці, оновити функцію та повторно додати стовпці, але, не маючи зайвих фанатів, це змінить порядки стовпців і може мати інші непередбачувані наслідки. Мені було цікаво, чи існує чистіший спосіб зробити це?


4
Я вирішив це лише частково, створивши фіктивні функції, що викликають справжні. Звичайно, якщо підпис зміниться, то це все знову.

3
На жаль, я не думаю, що існує якийсь "магічний" чи "чистіший" спосіб цього зробити. Якщо вам потрібно змінити функцію - вам потрібно буде скинути стовпці, змінити функцію та знову додати всі стовпці. Нічого не обійтися.
marc_s

@marc_s Добре це варто зняти, багато розумних людей тут :)
robertc

Погодьтеся з вищезазначеними коментарями. Думав, що SYNONYM може запропонувати тут деяку допомогу (посилайтесь на SYNONYM в обчисленому стовпчику) - але ви не можете ВИПУСКАТИ синонім, створений для "перенаправлення" його на інший об'єкт.
AdaTheDev

1
Досі ніде не настільки болісно, ​​як оновлення визначення CLR UDT (навіть коли зміна є лише налаштуванням методу і зовсім не впливає на представлення пам’яті)
Martin Smith

Відповіді:


2

Це може бути більше роботи, але він повинен отримати (приблизно) те, що ви шукаєте:

1 - Створіть нову таблицю, яка містить лише ваш ПК із головної таблиці та оновлену функцію.

2 - Відкиньте стару колонку

3 - Перейменуйте свою стару таблицю на щось подібне TableName_Base

4 - Створіть VIEWте, що приєднує вашу основну таблицю до таблиці пошуку з полями в тому порядку, в якому ви хочете їх бачити. Назвіть перегляд, незалежно від того, якою була ваша початкова назва таблиці.

Це потенційно створити деякі проблеми з INSERTSі UPDATESхоча , так як ви будете отримувати доступ через зір. Щоб вирішити це, ви можете або вставити в таблицю безпосередньо, оминаючи подання.


Це звучить як більше роботи та такого ж ризику, як видалення та повторне додавання стовпців.
robertc

1
@robertc Це буде менш руйнівним, якщо це високе середовище транзакцій, але так, це все ще досить безладно.
JNK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.