No SQL Server, uma coluna calculada é uma coluna virtual que usa uma expressão para calcular seu valor.
Uma coluna computada normalmente usará dados de outras colunas em seu cálculo. Se os dados em qualquer uma dessas colunas forem atualizados, a coluna computada refletirá automaticamente a atualização em seu cálculo.
Exemplo de uma coluna calculada
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
Neste exemplo, o
FullName
coluna é uma coluna computada. Ele concatena os valores do FirstName
e LastName
colunas para calcular o nome completo. Sem a coluna computada, se você quisesse selecionar o nome completo, precisaria fazer algo assim:
SELECT FirstName + ' ' + LastName AS FullName FROM Person;
Ou você pode usar o
CONCAT()
função, assim:SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Person;
Toda vez que você deseja selecionar um nome completo da tabela, precisa incluir a concatenação em sua consulta.
Mas usando uma coluna computada como a acima, você pode fazer isso:
SELECT FullName FROM Person;
Benefícios das Colunas Calculadas
Colunas computadas podem economizar tempo ao escrever consultas, reduzir erros e até melhorar o desempenho.
Colunas computadas podem ser úteis se você estiver executando a mesma consulta repetidamente, especialmente se essa consulta for baseada em regras de negócios que raramente mudam.
A coluna calculada no exemplo anterior pode nos poupar muito tempo no futuro, porque não precisaremos concatenar o nome e o sobrenome toda vez que quisermos selecionar o nome completo de alguém.
Exemplos de casos de uso
Exemplos de onde uma coluna computada pode ser útil incluem:
- Cálculo da idade de uma pessoa com base na data de nascimento em outra coluna
- Concatenar nome e sobrenome, com base no nome em uma coluna e no sobrenome em outra
- Cálculo do valor do estoque de um produto, com base no número de produtos em estoque em uma coluna e o preço em outra
- Calcule o IMC (Índice de Massa Corporal) de uma pessoa, com base em sua altura e peso em outra coluna
- Criando uma coluna "Classificação" que classifica as linhas com base nos valores de outras colunas
- Cálculo dos tempos de corrida dos maratonistas, com base no horário de início e término em outras colunas
Persistência de colunas computadas
Uma coluna computada não é armazenada fisicamente na tabela, a menos que esteja marcada como
PERSISTED
. Se for não uma coluna computada persistente, o cálculo ocorrerá sempre que a tabela for acessada.
Se é uma coluna computada persistente, o valor computado é armazenado fisicamente na tabela. Ou seja, ele não precisa calcular seu valor toda vez que você executa uma consulta. Se os dados forem atualizados em uma das colunas para as quais derivam seu valor, o valor da coluna computada será atualizado e armazenado na tabela. Isso pode ajudar no desempenho.
Esteja ciente de que uma coluna computada só pode ser persistida se for determinística. Se não for determinístico, você receberá um erro se tentar persistir.
Um não determinístico coluna é aquela que retorna valores diferentes mesmo com a mesma entrada. Por exemplo, se você usar a data atual em seu cálculo, o valor será diferente a cada dia e será considerado não determinístico.
Se você está simplesmente concatenando o nome e o sobrenome, isso seria determinístico e você poderia persistir essa coluna.
Criando uma coluna computada
Você pode criar colunas computadas da GUI do SSMS ou com Transact-SQL.
No SSMS
No SSMS, enquanto no Designer de tabela , crie a coluna que você deseja que seja a coluna calculada (ou simplesmente selecione-a se já existir) e, em Propriedades da coluna guia, insira sua fórmula na Especificação de coluna computada campo de propriedade.
Não se preocupe em dar à coluna computada um tipo de dados – o SQL Server fornecerá um tipo de dados com base em sua fórmula.
Você também pode selecionar Sim para é persistente se você desejar.
Usando T-SQL
Consulte Criar uma coluna computada no SQL Server usando T-SQL para obter um exemplo de como criar uma coluna computada usando Transact-SQL.