Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Alterar uma coluna existente para uma coluna computada no SQL Server (exemplo T-SQL)


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 o FullName 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 chamada FullName para uma coluna computada. Ele concatena o FirstName e LastName 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 no FirstName ou LastName 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 |+------------+-------------+------------+------ ----------+