Usando Campos Calculados em tabelas no Microsoft SQL Server

Campos Calculados em tabelas no Microsoft SQL Server

Campos calculados (ou colunas calculadas ou ainda colunas computadas) são colunas em uma tabela em um banco de dados que apresentam os resultados de uma expressão pré-definida, geralmente uma fórmula aplicada a outras colunas, da mesma forma que uma View, porém sem causar overhead no banco, pois por padrão seus dados não são fisicamente armazenados na tabela. Uma outra vantagem de um campo calculado é que a integridade dos dados é aumentada, pois os cálculos são realizados em nível de tabela, em vez de serem realizados por meio de queries (consultas) criadas pelo desenvolvedor.

Como citado, por padrão um campo calculado no SQL Server não armazena nenhum valor - os dados são calculados no momento de uma consulta. Porém, é possível persistir os dados de um campo calculado opcionalmente, o que significa que o cálculo é realizado e os dados são salvos no registro. É possível até mesmo indexar um campo calculado, e uma das aplicaçoes desses campos é na substituição de triggers, simplificando o design e a operação sobre o banco de dados.

Sintaxe

Para criar uma coluna calculada usamos a seguinte sintaxe:

nome_coluna AS expressão [PERSISTED]

onde expressão é a fórmula que desejamos usar para realizar o cálculo do valor da coluna.

Exemplo

Suponha a tabela de vendas contendo os campos Preco_Produto, Qtde e Preco_Total. Queremos criar essa tabela de modo que o campo Preco_Total seja calculado dinamicamente, multiplicando o preço do produto pela quantidade (adquirida), persistindo o valor calculado na tabela (gravando fisicamente o valor). Para isso, podemos usar o seguinte código:

CREATE TABLE tblVendas (
 ID_Venda SMALLINT PRIMARY KEY IDENTITY
 Preco_Produto MONEY NOT NULL,
 Qtde TINYINT NOT NULL,
 Preco_Total AS Preco_Produto * Qtde PERSISTED
);
GO

Observações importantes:

  • Uma coluna calculada não pode ter a restrição NOT NULL aplicada, e também não pode ter dados inseridos por uma declaração INSERT e nem modificados por um UPDATE.
  • Também não pode ser utilizada com definições de restrição DEFAULT e FOREIGN KEY (chave estrangeira).
  • Não é necessário especificar o tipo de dados do campo calculado ao criar a tabela.
  • Colunas persistidas ocupam mais espaço em disco do que colunas calculadas virtuais (sem PERSISTED).

 

Sobre Fábio dos Reis (1262 Artigos)
Fábio dos Reis trabalha com tecnologias variadas há mais de 25 anos, tendo atuado nos campos de Eletrônica, Telecomunicações, Programação de Computadores e Redes de Dados. É um entusiasta de Unix, Linux e Open Source em geral, adora Eletrônica e Música, e estuda idiomas, além de ministrar cursos e palestras sobre diversas tecnologias em São Paulo e outras cidades do Brasil.
Contato: Website

Escreva um comentário

Seu e-mail não será divulgado


*