Domanda

Ho una colonna calcolata chiamato Cost che restituisce il denaro.

Voglio avere un'altra colonna che restituisce (Cost * 2), ma non mi consente.

È stato utile?

Soluzione

colonne calcolate non possono fare riferimento altre colonne calcolate. Anche se si dovrebbe essere in grado di ripetere solo l'espressione che si desidera fare riferimento. Da MSDN :

  

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

Vorrei anche aggiungere che se questo dovesse funzionare come si spera, avrebbe presentato tutti i tipi di nuovi problemi che avrebbe dovuto affrontare. Attualmente, aggiornamenti in molte colonne / righe verificano in parallelo e atomicamente.

Pertanto, non avrebbe senso utilizzare una colonna calcolata nel calcolo perché non sarebbe esattamente un valore ... ancora. Se non altro, si sarebbe utilizzando un vecchio, il valore non-aggiornato.

Se si voleva davvero per evitare la duplicazione l'espressione, è potrebbero fare questo in un trigger, anche se si consiglia fortemente non farlo. I trigger non sono divertenti e devono essere utilizzati solo da persone molto esperte in rari casi.

Altri suggerimenti

È necessario definire lo contro le colonne di base della tabella .

  

È un computed_column_expression   espressione che definisce il valore di un   colonna calcolata. Una colonna calcolata è   una colonna virtuale che non è   fisicamente memorizzato nella tabella, a meno che   la colonna è contrassegnata PERSISTED. Il   colonna viene calcolata da un'espressione   che utilizza altre colonne della stessa   tavolo. Ad esempio, una colonna calcolata   può avere la definizione: costo AS prezzo   * Qty. L'espressione può essere un nome di colonna noncomputed, costante,   funzione, variabile e ogni   combinazione di questi collegati da una   o più operatori. L'espressione   non può essere una sottoquery o contenere alias   i 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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top