2009-12-04 37 views

risposta

15

Le colonne calcolate non possono fare riferimento ad altre colonne calcolate. Anche se dovresti essere in grado di ripetere l'espressione che vorresti fare riferimento. From MSDN:

Una colonna calcolata viene calcolata da un'espressione che può utilizzare altre colonne nella stessa tabella. L'espressione può essere un nome di colonna noncomputed, costante, funzione e qualsiasi combinazione di questi collegati da uno o più operatori. L'espressione non può essere una sottoquery.

Devo anche aggiungere che se ciò dovesse funzionare come speri, presenterebbe tutti i nuovi problemi che dovresti affrontare. Attualmente, gli aggiornamenti su più colonne/righe si verificano in parallelo e atomicamente.

Pertanto, non avrebbe senso utilizzare una colonna calcolata nel calcolo perché non avrebbe esattamente un valore ... ancora. Se mai, staresti usando un valore vecchio, non aggiornato.

Se si voleva davvero per evitare la duplicazione l'espressione, si potrebbe fare questo in un trigger, anche se vi esorto vivamente non farlo. I trigger non sono divertenti e dovrebbero essere utilizzati solo da persone molto esperte in rari casi.

+0

_... presenterebbe tutti i tipi di nuovi problemi ... L'unico problema sarebbe impedire i riferimenti circolari (in cui due colonne calcolate si fanno riferimento l'un l'altro) che dovrebbe essere comunque impedito al server di supportarlo, dal momento che dovrebbe determinare l'ordine per calcolare le colonne. – Trisped

6

Devi definirlo against the base columns in the table.

computed_column_expression È un espressione che definisce il valore di una colonna calcolata . Una colonna calcolata è una colonna virtuale che non è fisicamente memorizzata nella tabella, a meno che la colonna sia contrassegnata PERSISTED. La colonna viene calcolata da un'espressione che utilizza altre colonne nella stessa tabella . Ad esempio, una colonna calcolata può avere la definizione: costo AS prezzo * qty. L'espressione può essere un nome colonna non elaborato, costante, funzione , variabile e qualsiasi combinazione collegata da uno o più operatori. L'espressione non può essere una sottoquery o contenere alias tipi di dati .

Anche se si potrebbe refactoring entrambi di utilizzare lo stesso scalare UDF (passare in tutte le stesse colonne) per facilitarne la manutenzione e garantire la coerenza della logica, il calo di prestazioni sarebbe enorme, e io uso solo UDF scalari come ultima risorsa.

Problemi correlati