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.

È stato utile?

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.

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