Funzione scalare utilizzata nella colonna calcolata, qual è il modo più pulito per aggiornare la funzione?


10

Voglio aggiornare una funzione scalare nel nostro database. Questa funzione viene utilizzata per diverse colonne calcolate in una tabella di chiavi, quindi ottengo un errore di dipendenza se provo ad aggiornarlo. Posso rimuovere esplicitamente le colonne, aggiornare la funzione e aggiungere nuovamente le colonne, ma, senza troppi problemi, ciò cambierà gli ordini delle colonne e potrebbe avere altre conseguenze indesiderate. Mi chiedevo se ci fosse un modo più pulito di farlo?


4
L'ho risolto solo parzialmente creando funzioni fittizie che chiamano quelle vere. Naturalmente, se la firma cambia, allora è tutto da capo.

3
Sfortunatamente, non penso che ci sia un modo "magico" o "più pulito" per farlo. Se è necessario modificare la funzione, è necessario eliminare le colonne, modificare la funzione e aggiungere nuovamente tutte le colonne. Niente da fare.
marc_s,

@marc_s Beh, vale la pena provare, un sacco di persone intelligenti qui intorno :)
Robert

Accetto i commenti sopra. Pensavo che ci potesse essere spazio per i SYNONYM per offrire un po 'di aiuto qui (fare riferimento a un SYNONYM nella colonna calcolata) - ma una volta creato non si può ALTERARE un sinonimo per "reindirizzarlo" a un altro oggetto.
AdaTheDev il

1
Ancora meno doloroso come aggiornare la definizione di un CLR UDT (anche quando la modifica è solo una modifica di un metodo e non influisce affatto sulla rappresentazione della memoria)
Martin Smith

Risposte:


2

Questo potrebbe richiedere più lavoro ma dovrebbe ottenere (approssimativamente) ciò che stai cercando:

1 - Crea una nuova tabella che ha solo il tuo PK dalla tabella principale e dalla funzione aggiornata.

2 - Rilascia la tua vecchia colonna

3 - Rinomina il tuo vecchio tavolo in qualcosa del genere TableName_Base

4 - Crea un VIEWelemento che unisce la tabella principale alla tabella di ricerca, con i campi nell'ordine in cui desideri vederli. Assegna un nome alla vista indipendentemente dal nome della tabella originale.

Questo potenzialmente creerà alcuni problemi con INSERTSe UPDATESsebbene poiché accederai tramite una vista. Per far ciò, è possibile inserire direttamente nella tabella, ignorando la vista.


Sembra più lavoro e lo stesso livello di rischio della rimozione e dell'aggiunta di nuove colonne.
robertc,

1
@robertc Sarà meno distruttivo se si tratta di un ambiente di transazione elevato, ma sì è ancora piuttosto disordinato.
JNK,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.