Come posso impostare un semplice campo calcolato in SQL Server?
-
16-09-2019 - |
Domanda
Ho una tabella con diversi campi di conto come questo:
MAIN_ACCT
GROUP_ACCT
SUB_ACCT
ho spesso bisogno di combinarli in questo modo:
SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT
FROM ACCOUNT_TABLE
Vorrei un campo calcolato che lo fa automaticamente questo, quindi posso solo dire:
SELECT ACCT_NUMBER FROM ACCOUNT_TABLE
Qual è il modo migliore per fare questo?
sto usando SQL Server 2005.
Soluzione
ALTER TABLE ACCOUNT_TABLE
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED
Questa persisterà una colonna calcolata e può eseguire meglio in seleziona di un calcolo in vista o UDF se si dispone di un gran numero di record (una volta che la creazione intial della colonna è successo che può essere dolorosamente lento e probabilmente dovrebbe accadere durante tempi di utilizzo bassi). Esso rallenterà inserimenti e aggiornamenti. Di solito trovo un inserto lento o aggiornamento è tollerato meglio dagli utenti di un ritardo in un select a meno che non si ottiene problemi di bloccaggio.
Il metodo migliore per fare questo dipenderà moltissimo sul vostro uso e che tipo di prestazioni necessarie. Se non si dispone di un sacco di dischi o se la colonna calcolata non sarà chiamato di frequente che, non si può decidere una colonna persistente, ma se si sta eseguendo spesso i rapporti con tutti i record per l'anno o di altri grandi gruppi di i dati, è possibile trovare la colonna calcolata persistito funziona meglio per voi. Come per qualsiasi operazione di questo tipo, l'unico modo per sapere ciò che funziona meglio nella vostra situazione è quello di testare.
Altri suggerimenti
Questo è un ottimo candidato per una vista.
CREATE VIEW vwACCOUNT_TABLE
AS
SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT AS ACCT_NUMBER
FROM ACCOUNT_TABLE
GO
--now select from the View
SELECT ACCT_NUMBER FROM vwACCOUNT_TABLE
ALTER TABLE ACCOUNT_TABLE ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT;
la colonna non viene mantenuto nella tabella, verrà ricreato on-the-Cly ogni volta che si fa riferimento a esso. È possibile ottenere lo stesso risultato utilizzando la vista. Se si utilizzano i predicati di filtro o ordinamento sulla colonna calcolata e si desidera aggiungere un indice su di essa vedi Creazione di indici su colonne calcolate .
Bene, si potrebbe creare una vista del ACCOUNT_TABLE e query che. O Credo che si potrebbe creare una funzione definita dall'utente che ottenere lo stesso risultato.