sql >> Base de Datos >  >> RDS >> Sqlserver

Cambiar una columna existente a una columna calculada en SQL Server (ejemplo de T-SQL)

Este artículo demuestra cómo usar T-SQL para cambiar una columna existente a una columna calculada en SQL Server.

Una columna calculada es una columna virtual que utiliza una expresión para calcular su valor. La expresión generalmente usará datos de otras columnas. Una columna calculada no se almacena físicamente en la tabla a menos que esté marcada como PERSISTED .

Ejemplo 1:crear una tabla SIN una columna calculada

Primero, creemos una tabla sin una columna 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:

+------------+-------------+------------+----------------+
| PersonID   | FirstName   | LastName   | FullName       |
|------------+-------------+------------+----------------|
| 1          | Homer       | Seinfeld   | Homer Seinfeld |
| 2          | Bart        | Costanza   | Bart Costanza  |
| 3          | Marge       | Kramer     | Marge Kramer   |
+------------+-------------+------------+----------------+

Puede ver que me estoy duplicando cuando inserto datos. El nombre completo es una combinación del nombre y el apellido, y vuelvo a escribir estos datos para cada fila.

Esto también podría causar problemas al actualizar la tabla. Tendría que acordarme de actualizar dos columnas cada vez que alguien cambie su nombre o su segundo nombre (y tres columnas si cambiaron ambos).

Este es un buen candidato para una columna calculada.

Ejemplo 2:cambiar la columna a una columna calculada

Para cambiar una columna a una columna calculada, primero debe soltar la columna y luego crearla con la nueva definición.

Aquí se explica cómo cambiar el FullName columna a una columna calculada.

ALTER TABLE Person DROP COLUMN FullName;

ALTER TABLE Person ADD FullName AS (CONCAT(FirstName, ' ', LastName));

Acabamos de "cambiar" la columna llamada FullName a una columna calculada. Concatena el FirstName y LastName columnas.

Esto es lo que sucede cuando seleccionamos el contenido de la tabla:

SELECT *
FROM Person;

Resultado:

+------------+-------------+------------+----------------+
| PersonID   | FirstName   | LastName   | FullName       |
|------------+-------------+------------+----------------|
| 1          | Homer       | Seinfeld   | Homer Seinfeld |
| 2          | Bart        | Costanza   | Bart Costanza  |
| 3          | Marge       | Kramer     | Marge Kramer   |
+------------+-------------+------------+----------------+

Ejemplo 3:actualizar un valor

Ahora, si se actualiza un valor en el FirstName o LastName columnas, esto afectará el valor devuelto por la columna calculada. No es necesario actualizarlo en dos columnas.

Ejemplo:

UPDATE Person
SET LastName = 'Bourne'
WHERE PersonId = 3;

SELECT *
FROM Person;

Resultado:

+------------+-------------+------------+----------------+
| PersonID   | FirstName   | LastName   | FullName       |
|------------+-------------+------------+----------------|
| 1          | Homer       | Seinfeld   | Homer Seinfeld |
| 2          | Bart        | Costanza   | Bart Costanza  |
| 3          | Marge       | Bourne     | Marge Bourne   |
+------------+-------------+------------+----------------+