Este artigo demonstra como usar o T-SQL para alterar uma coluna existente para uma coluna computada no SQL Server.
Uma coluna calculada é uma coluna virtual que usa uma expressão para calcular seu valor. A expressão normalmente usará dados de outras colunas. Uma coluna computada não é armazenada fisicamente na tabela, a menos que esteja marcada como
PERSISTED
. Exemplo 1 – Criar uma tabela SEM uma coluna computada
Primeiro, vamos criar uma tabela sem uma coluna calculada.
CREATE TABLE Person ( PersonID int IDENTITY (1,1) NOT NULL, FirstName varchar(70), LastName varchar(70), FullName varchar(140) );INSERT INTO Person (FirstName, LastName, FullName)VALUES (' Homer', 'Seinfeld', 'Homer Seinfeld'), ('Bart', 'Costanza', 'Bart Costanza'), ('Marge', 'Kramer', 'Marge Kramer');SELECT *FROM Person;
Resultado:
+------------+-------------+------------+------ ----------+| PessoaID | Nome | Sobrenome | Nome Completo ||------------+-------------+------------+------- ---------|| 1 | Homero | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Margem | Kramer | Marge Kramer |+------------+-------------+------------+------ ----------+
Você pode ver que estou dobrando quando insiro dados. O nome completo é uma combinação do nome e do sobrenome, e estou redigitando esses dados para cada linha.
Isso também pode causar problemas ao atualizar a tabela. Eu precisaria me lembrar de atualizar duas colunas sempre que alguém mudasse seu primeiro ou segundo nome (e três colunas se eles mudassem ambos).
Este é um bom candidato para uma coluna computada.
Exemplo 2 – Alterar a coluna para uma coluna computada
Para alterar uma coluna para uma coluna computada, você precisa primeiro descartar a coluna e, em seguida, criá-la com a nova definição.
Veja como alterar oFullName
coluna para uma coluna computada.
ALTER TABLE Pessoa DROP COLUMN FullName;ALTER TABLE Pessoa ADD FullName AS (CONCAT(FirstName, ' ', LastName));
Acabamos de "alterar" a coluna chamadaFullName
para uma coluna computada. Ele concatena oFirstName
eLastName
colunas.
Veja o que acontece quando selecionamos o conteúdo da tabela:
SELECT *FROM Pessoa;
Resultado:
+------------+-------------+------------+------ ----------+| PessoaID | Nome | Sobrenome | Nome Completo ||------------+-------------+------------+------- ---------|| 1 | Homero | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Margem | Kramer | Marge Kramer |+------------+-------------+------------+------ ----------+Exemplo 3 – Atualizar um valor
Agora, se um valor for atualizado noFirstName
ouLastName
colunas, isso afetará o valor retornado pela coluna computada. Não há necessidade de atualizá-lo em duas colunas.
Exemplo:
UPDATE PersonSET LastName ='Bourne'WHERE PersonId =3;SELECT *FROM Person;
Resultado:
+------------+-------------+------------+------ ----------+| PessoaID | Nome | Sobrenome | Nome Completo ||------------+-------------+------------+------- ---------|| 1 | Homero | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Margem | Bourne | Marge Bourne |+------------+-------------+------------+------ ----------+