Skalarfunktion in berechneten Spalten verwendet. Wie kann die Funktion am saubersten aktualisiert werden?

10

Ich möchte eine Skalarfunktion in unserer Datenbank aktualisieren. Diese Funktion wird für mehrere berechnete Spalten in einer Schlüsseltabelle verwendet, sodass beim Versuch, sie zu aktualisieren, ein Abhängigkeitsfehler angezeigt wird. Ich kann die Spalten explizit entfernen, die Funktion aktualisieren und die Spalten erneut hinzufügen, aber ohne viel zusätzliches Fanning ändert dies die Spaltenreihenfolge und kann andere unbeabsichtigte Konsequenzen haben. Ich fragte mich, ob es einen saubereren Weg gab?

Robertc
quelle
4
Ich habe dies nur teilweise gelöst, indem ich Dummy-Funktionen erstellt habe, die echte Funktionen aufrufen. Wenn sich die Signatur ändert, ist es natürlich wieder von vorne.
3
Leider glaube ich nicht, dass es einen "magischen" oder "saubereren" Weg gibt, dies zu tun. Wenn Sie die Funktion ändern müssen, müssen Sie die Spalten löschen, die Funktion ändern und alle Spalten erneut hinzufügen. Daran führt kein Weg vorbei.
marc_s
@marc_s Nun, es ist einen Versuch wert, viele kluge Leute hier :)
Robertc
Stimmen Sie den obigen Kommentaren zu. Es gab möglicherweise Möglichkeiten für SYNONYMs, hier Hilfe anzubieten (verweisen Sie auf einen SYNONYM in der berechneten Spalte) - aber Sie können ein einmal erstelltes Synonym nicht ÄNDERN, um es auf ein anderes Objekt umzuleiten.
AdaTheDev
1
Immer noch nicht annähernd so schmerzhaft wie das Aktualisieren der Definition eines CLR-UDT (selbst wenn die Änderung nur eine Änderung einer Methode darstellt und die Speicherdarstellung überhaupt nicht beeinflusst)
Martin Smith

Antworten:

2

Dies mag mehr Arbeit sein, aber es sollte (ungefähr) das bekommen, wonach Sie suchen:

1 - Erstellen Sie eine neue Tabelle mit nur Ihrer PK aus der Haupttabelle und der aktualisierten Funktion.

2 - Lassen Sie Ihre alte Spalte fallen

3 - Benennen Sie Ihren alten Tisch in etwas um TableName_Base

4 - Erstellen Sie eine VIEW, die Ihre Haupttabelle mit Ihrer Nachschlagetabelle verbindet, mit den Feldern in der Reihenfolge, in der Sie sie sehen möchten. Benennen Sie die Ansicht unabhängig von Ihrem ursprünglichen Tabellennamen.

Dies kann möglicherweise zu Problemen mit INSERTSund führen, UPDATESda Sie über eine Ansicht darauf zugreifen. Um dies zu bewältigen, können Sie entweder direkt in die Tabelle einfügen und die Ansicht umgehen.

JNK
quelle
Das klingt nach mehr Arbeit und dem gleichen Risiko wie das Entfernen und erneute Hinzufügen der Spalten.
Robertc
1
@robertc Es ist weniger störend, wenn dies eine Umgebung mit hohen Transaktionen ist, aber ja, es ist immer noch ziemlich chaotisch.
JNK