Pergunta

Eu tenho uma tabela com vários campos da conta como este:

MAIN_ACCT
GROUP_ACCT
SUB_ACCT

Muitas vezes eu preciso combiná-los como este:

SELECT MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT
FROM ACCOUNT_TABLE

Eu gostaria de um campo calculado que faz isso automaticamente, assim que eu posso apenas dizer:

SELECT ACCT_NUMBER FROM ACCOUNT_TABLE

Qual é a melhor maneira de fazer isso?

Estou usando o SQL Server 2005.

Foi útil?

Solução

ALTER TABLE ACCOUNT_TABLE 
ADD ACCT_NUMBER AS MAIN_ACCT+'-'+GROUP_ACCT+'-'+SUB_ACCT PERSISTED

Este irá persistir uma coluna calculada e pode ter um melhor desempenho em seleciona de um cálculo na vista ou UDF se você tem um grande número de registros (uma vez que a criação inicial de coluna que aconteceu o que pode ser dolorosamente lento e provavelmente deve acontecer durante tempos de utilização baixos). Isso retarda inserções e atualizações. Normalmente eu encontrar uma inserção lenta ou atualização é melhor tolerado pelos usuários do que um atraso em uma escolha a menos que você começar problemas de bloqueio.

O melhor método para fazer isso vai depender muito do seu uso e que tipo de desempenho que você precisa. Se você não tem um monte de registros ou se a coluna computada não será chamado que muitas vezes, você não pode querer uma coluna persistente, mas se você está freqüentemente executar relatórios com todos os registros para o ano ou outros grandes conjuntos de de dados, você pode encontrar a coluna calculada persistiu funciona melhor para você. Como acontece com qualquer tarefa desta natureza, a única maneira de saber o que funciona melhor em sua situação é teste.

Outras dicas

Este é um grande candidato para a View.

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;

a coluna não é mantida na tabela, será recriado on-the-CLY cada vez que você fazer referência a ela. Você pode conseguir o mesmo resultado usando uma vista. Se você usar a filtragem predicados ou ordenação na coluna computada e deseja adicionar um índice em que ver Criando índices em colunas computadas .

Bem, você poderia criar uma visão do ACCOUNT_TABLE e consulta que. Ou eu acredito que você poderia criar uma função definida pelo usuário que realizar a mesma coisa.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top