Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zmień istniejącą kolumnę na kolumnę obliczoną w SQL Server (przykład T-SQL)

W tym artykule pokazano, jak używać T-SQL do zmiany istniejącej kolumny na kolumnę obliczoną w SQL Server.

kolumna obliczona to wirtualna kolumna, która używa wyrażenia do obliczenia swojej wartości. Wyrażenie zazwyczaj używa danych z innych kolumn. Obliczona kolumna nie jest fizycznie przechowywana w tabeli, chyba że jest oznaczona jako PERSISTED .

Przykład 1 – Utwórz tabelę BEZ kolumny obliczonej

Najpierw utwórzmy stół bez kolumna obliczeniowa.

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;

Wynik:

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

Widać, że podwajam się, kiedy wstawiam dane. Pełne imię i nazwisko jest kombinacją imienia i nazwiska i przepisuję te dane dla każdego wiersza.

Może to również powodować problemy podczas aktualizowania tabeli. Muszę pamiętać, aby zaktualizować dwie kolumny za każdym razem, gdy ktoś zmienił swoje imię lub nazwisko (i trzy kolumny, jeśli zmienił oba).

To dobry kandydat na kolumnę obliczeniową.

Przykład 2 – Zmień kolumnę na kolumnę obliczaną

Aby zmienić kolumnę na kolumnę wyliczaną, musisz najpierw upuścić kolumnę, a następnie utworzyć ją z nową definicją.

Oto jak zmienić FullName kolumna do kolumny wyliczanej.

ALTER TABLE Person DROP COLUMN FullName;

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

Właśnie „zmieniliśmy” kolumnę o nazwie FullName do kolumny wyliczanej. Łączy FirstName i LastName kolumny.

Oto, co się dzieje, gdy wybieramy zawartość tabeli:

SELECT *
FROM Person;

Wynik:

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

Przykład 3 – Aktualizacja wartości

Teraz, jeśli wartość zostanie zaktualizowana w FirstName lub LastName kolumn, wpłynie to na wartość zwróconą przez wyliczoną kolumnę. Nie ma potrzeby aktualizowania go w dwóch kolumnach.

Przykład:

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

SELECT *
FROM Person;

Wynik:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć procent zbioru wyników w SQL Server

  2. Użyj sys.trigger_event_types, aby wyświetlić listę typów zdarzeń wyzwalających w SQL Server

  3. Jaka jest różnica między tabelą tymczasową a zmienną tabeli w programie SQL Server?

  4. SQL:Co jest lepsze Bit czy char(1)

  5. Zbiorcze wstawienie pliku CSV do SQL Server z niespójnymi cudzysłowami