sql >> Databáze >  >> RDS >> Sqlserver

Změna existujícího sloupce na vypočítaný sloupec na serveru SQL (příklad T-SQL)

Tento článek ukazuje, jak pomocí T-SQL změnit existující sloupec na vypočítaný sloupec na serveru SQL.

Vypočítaný sloupec je virtuální sloupec, který používá výraz k výpočtu své hodnoty. Výraz bude obvykle používat data z jiných sloupců. Vypočítaný sloupec není v tabulce fyzicky uložen, pokud není označen PERSISTED .

Příklad 1 – Vytvoření tabulky BEZ vypočítaného sloupce

Nejprve vytvořte tabulku bez vypočítaný sloupec.

CREATE TABLE Person ( PersonID int IDENTITY (1,1) NOT NULL, FirstName varchar(70), LastName varchar(70), FullName varchar(140) );INSERT INTO Person (FirstName, Last Name, FullName)VALUES (' Homer', 'Seinfeld', 'Homer Seinfeld'), ('Bart', 'Costanza', 'Bart Costanza'), ('Marge', 'Kramer', 'Marge Kramer');SELECT *FROM Person; 

Výsledek:

+------------+-------------+------------+------ ----------+| ID osoby | Jméno | Příjmení | Celé jméno ||------------+-------------+------------+------- ---------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+-------------+------------+------- ----------+

Můžete vidět, že se při vkládání dat zdvojnásobuji. Celé jméno je kombinací křestního jména a příjmení a tato data přepisuji pro každý řádek.

To může také způsobit problémy při aktualizaci tabulky. Potřeboval bych si pamatovat aktualizovat dva sloupce, kdykoli někdo změnil své křestní nebo druhé jméno (a tři sloupce, pokud změnil oba).

Toto je dobrý kandidát na počítaný sloupec.

Příklad 2 – Změňte sloupec na vypočítaný sloupec

Chcete-li změnit sloupec na vypočítaný sloupec, musíte sloupec nejprve zrušit a poté jej vytvořit s novou definicí.

Zde je návod, jak změnit FullName sloupec na vypočítaný sloupec.

ALTER TABLE Person DROP COLUMN Full Name;ALTER TABLE Person ADD Full Name AS (CONCAT(FirstName, ' ', LastName));

Právě jsme „změnili“ sloupec s názvem FullName do vypočítaného sloupce. Zřetězí FirstName a LastName sloupce.

Zde je to, co se stane, když vybereme obsah tabulky:

SELECT *FROM Person;

Výsledek:

+------------+-------------+------------+------ ----------+| ID osoby | Jméno | Příjmení | Celé jméno ||------------+-------------+------------+------- ---------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Kramer | Marge Kramer |+------------+-------------+------------+------- ----------+

Příklad 3 – Aktualizace hodnoty

Nyní, pokud je aktualizována hodnota v FirstName nebo LastName sloupců, ovlivní to hodnotu vrácenou vypočítaným sloupcem. Není třeba jej aktualizovat ve dvou sloupcích.

Příklad:

UPDATE PersonSET LastName ='Bourne'WHERE PersonId =3;SELECT *FROM Person;

Výsledek:

+------------+-------------+------------+------ ----------+| ID osoby | Jméno | Příjmení | Celé jméno ||------------+-------------+------------+------- ---------|| 1 | Homer | Seinfeld | Homer Seinfeld || 2 | Bart | Costanza | Bart Costanza || 3 | Marge | Bourne | Marge Bourne |+------------+-------------+------------+------- ----------+

  1. Jak předvídat a uniknout jednoduchému citátu ' v oracle

  2. Jak opravit „Seznam výběru pro příkaz INSERT obsahuje méně položek než seznam vložení“

  3. Jak odstranit správné odsazení u názvu dne v Oracle

  4. Záleží na pořadí tabulek, na které se odkazuje v klauzuli ON v JOIN?