Funkcja skalarna używana w kolumnie obliczeniowej, jaki jest najczystszy sposób na aktualizację funkcji?

10

Chcę zaktualizować funkcję skalarną w naszej bazie danych. Ta funkcja jest używana dla kilku kolumn obliczeniowych w tabeli kluczy, więc otrzymuję błąd zależności, jeśli spróbuję ją zaktualizować. Mogę jawnie usunąć kolumny, zaktualizować funkcję i ponownie dodać kolumny, ale bez większego zainteresowania, to zmieni kolejność kolumn i może mieć inne niezamierzone konsekwencje. Zastanawiałem się, czy istnieje lepszy sposób na zrobienie tego?

robertc
źródło
4
Rozwiązałem to tylko częściowo, tworząc fałszywe funkcje wywołujące prawdziwe. Oczywiście, jeśli podpis się zmieni, to wszystko się powtórzy.
3
Niestety nie sądzę, aby istniał jakiś „magiczny” lub „czystszy” sposób na zrobienie tego. Jeśli musisz zmodyfikować funkcję - musisz upuścić kolumny, zmodyfikować funkcję i ponownie dodać wszystkie kolumny. Nie ma mowy o tym.
marc_s
@marc_s Cóż, warto spróbować, jest tu wielu inteligentnych ludzi :)
robertc
Zgadzam się z powyższymi komentarzami. Pomyślałem, że może istnieć możliwość zaoferowania przez SYNONYM pewnej pomocy tutaj (odwołaj się do SYNONYMU w kolumnie obliczeniowej) - ale nie możesz ZMIENIĆ raz utworzonego synonimu, aby „przekierować” go do innego obiektu.
AdaTheDev
1
Nadal tak bolesne jak aktualizacja definicji CLR UDT (nawet jeśli zmiana jest tylko drobną modyfikacją metody i wcale nie wpływa na reprezentację pamięci)
Martin Smith

Odpowiedzi:

2

To może być więcej pracy, ale powinno uzyskać (w przybliżeniu) to, czego szukasz:

1 - Utwórz nową tabelę, która ma tylko swoje PK z głównej tabeli i zaktualizowanej funkcji.

2 - Upuść starą kolumnę

3 - Zmień nazwę swojego starego stołu na coś podobnego TableName_Base

4 - Utwórz, VIEWktóry łączy główną tabelę z tabelą odnośników, z polami w kolejności, w której chcesz je zobaczyć. Nazwij widok bez względu na to, jaka była oryginalna nazwa tabeli.

To potencjalnie spowoduje pewne problemy, INSERTSa UPDATESponieważ będziesz uzyskiwać dostęp za pośrednictwem widoku. Aby sobie z tym poradzić, możesz albo wstawić bezpośrednio do tabeli, pomijając widok.

JNK
źródło
To brzmi jak więcej pracy i taki sam poziom ryzyka jak usuwanie i ponowne dodawanie kolumn.
robertc
1
@robertc Będzie to mniej uciążliwe, jeśli jest to środowisko o wysokiej transakcji, ale tak, nadal jest dość niechlujne.
JNK