Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Modificare una colonna esistente in una colonna calcolata in SQL Server (esempio T-SQL)

Questo articolo illustra come utilizzare T-SQL per modificare una colonna esistente in una colonna calcolata in SQL Server.

Una colonna calcolata è una colonna virtuale che usa un'espressione per calcolarne il valore. L'espressione utilizzerà in genere i dati di altre colonne. Una colonna calcolata non viene archiviata fisicamente nella tabella a meno che non sia contrassegnata con PERSISTED .

Esempio 1:creare una tabella SENZA una colonna calcolata

Per prima cosa, creiamo una tabella senza una colonna calcolata.

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;

Risultato:

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

Puoi vedere che sto raddoppiando quando inserisco i dati. Il nome completo è una combinazione di nome e cognome e sto ridigitando questi dati per ogni riga.

Ciò potrebbe anche causare problemi durante l'aggiornamento della tabella. Dovrei ricordarmi di aggiornare due colonne ogni volta che qualcuno cambia nome o secondo nome (e tre colonne se cambia entrambi).

Questo è un buon candidato per una colonna calcolata.

Esempio 2:modifica della colonna in una colonna calcolata

Per cambiare una colonna in una colonna calcolata, devi prima rilasciare la colonna, quindi crearla con la nuova definizione.

Ecco come modificare il FullName colonna in una colonna calcolata.

ALTER TABLE Person DROP COLUMN FullName;

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

Abbiamo appena "cambiato" la colonna denominata FullName in una colonna calcolata. Concatena il FirstName e LastName colonne.

Ecco cosa succede quando selezioniamo il contenuto della tabella:

SELECT *
FROM Person;

Risultato:

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

Esempio 3:aggiornamento di un valore

Ora, se un valore viene aggiornato in FirstName o LastName colonne, ciò influirà sul valore restituito dalla colonna calcolata. Non è necessario aggiornarlo in due colonne.

Esempio:

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

SELECT *
FROM Person;

Risultato:

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