Colunas Calculadas no SQL Server
Veja como criar colunas calculadas no SQL Server
As colunas calculadas são colunas que possuem o conteúdo baseado nas informações gravadas em outras colunas, ao invés de depender de dados inseridos pelo usuário.
As informação destas colunas, por padrão, são geradas no momento da consulta, mas, podem ser persistidas no banco de dados.
Vamos ver um exemplo, primeiro, vamos criar a nossa tabela de testes e carregar algumas informações:
DROP TABLE IF EXISTS alunos;
CREATE TABLE alunos (
ID INT IDENTITY(1,1) PRIMARY KEY
,primeiro_nome VARCHAR(255) NOT NULL
,sobrenome VARCHAR(255) NOT NULL
,mensalidade DECIMAL(18,2) NOT NULL
);
INSERT INTO alunos VALUES
('João','Silva' ,350)
,('Matheus', 'Santos',400)
,('Lucas', 'Azevedo',450)
,('Thiago', 'Fernandes',500);
SELECT * FROM alunos;
Agora vamos criar uma consulta que além destes dados, retorne o nome completo e o valor gasto por ano. A consulta vai ficar da seguinte forma:
SELECT Id ,primeiro_nome ,sobrenome, mensalidade
,CONCAT(primeiro_nome, ' ', sobrenome) AS nome_completo
,(mensalidade * 12) AS valor_ano
FROM alunos;
Para juntar o valor das colunas primeiro_nome e sobrenome, utilizamos a função CONCAT, perceba que inserimos um espaço em branco entre as duas colunas. Para o cálculo da coluna valor_ano, fizemos a multiplicação da mensalidade.
Perceba que estes novos campos existem apenas no resultados desta consulta. Para que eles façam parte da tabela, vamos precisar fazer a seguinte alteração:
ALTER TABLE alunos DROP COLUMN IF EXISTS nome_completo;
ALTER TABLE alunos DROP COLUMN IF EXISTS valor_ano;
ALTER TABLE alunos ADD nome_completo As (CONCAT(primeiro_nome, ' ',sobrenome))
ALTER TABLE alunos ADD valor_ano As (mensalidade * 12);
Agora, se você fizer novamente a consulta desta forma:
SELECT Id ,primeiro_nome ,sobrenome,mensalidade ,nome_completo ,valor_ano FROM alunos;
Vai ter o mesmo resultado da primeira consulta!
Apesar de agora as duas novas colunas fazerem parte da tabela, os campos ainda são calculados toda vez que a tabela é consultada. Para guardar os dados dentro destes campos, o nosso ALTER TABLE precisa ter apenas uma alteração, no final precisamos acrescentar PERSISTED. O nosso ALTER TABLE vai ficar da seguinte forma:
ALTER TABLE alunos
ADD nome_completo As (CONCAT(primeiro_nome, ' ',sobrenome)) PERSISTED
ALTER TABLE alunos
ADD valor_ano As (mensalidade * 12) PERSISTED