Тази статия демонстрира как да използвате T-SQL за промяна на съществуваща колона в изчислена колона в SQL Server.
изчислена колона е виртуална колона, която използва израз за изчисляване на стойността си. Изразът обикновено използва данни от други колони. Изчислена колона не се съхранява физически в таблицата, освен ако не е маркирана PERSISTED
.
Пример 1 – Създайте таблица БЕЗ изчислена колона
Първо, нека създадем таблица без изчислена колона.
СЪЗДАВАНЕ НА ТАБЛИЦА Лице ( PersonID int IDENTITY (1,1) НЕ НУЛЕВО, Име varchar(70), Фамилия varchar(70), Пълно име varchar(140) );INSERT INTO Person (Firstname, LastName, FullName)VALUES (' Homer“, „Seinfeld“, „Homer Seinfeld“), („Bart“, „Costanza“, „Bart Costanza“), („Marge“, „Kramer“, „Marge Kramer“);ИЗБЕРЕТЕ *ОТ човек;предварително>Резултат:
+------------+------------+------------+------ ----------+| PersonID | Име | Фамилия | Пълно име ||------------+------------+-----------+------- ---------|| 1 | Омир | Сайнфелд | Хоумър Сайнфелд || 2 | Барт | Костанца | Барт Костанца || 3 | Мардж | Крамер | Мардж Крамър |+------------+------------+-----------+------ ----------+Можете да видите, че се удвоявам, когато вмъквам данни. Пълното име е комбинация от собствено и фамилно име и аз въвеждам отново тези данни за всеки ред.
Това също може да причини проблеми при актуализиране на таблицата. Трябва да помня да актуализирам две колони всеки път, когато някой промени първото или второто си име (и три колони, ако промени и двете).
Това е добър кандидат за изчислена колона.
Пример 2 – Променете колоната на изчислена колона
За да промените колона в изчислена, първо трябва да пуснете колоната, след което да я създадете с новата дефиниция.
Ето как да промените
FullName
колона към изчислена колона.ALTER TABLE Лице DROP COLUMN Пълно име;ALTER TABLE Лице ДОБАВИ пълно име КАТО (CONCAT(Firstname, ' , Lastname));Току-що „променихме“ колоната, наречена
FullName
към изчислена колона. Той обединяваFirstName
иLastName
колони.Ето какво се случва, когато изберем съдържанието на таблицата:
ИЗБЕРЕТЕ *ОТ Лице;Резултат:
+------------+------------+------------+------ ----------+| PersonID | Име | Фамилия | Пълно име ||------------+------------+-----------+------- ---------|| 1 | Омир | Сайнфелд | Хоумър Сайнфелд || 2 | Барт | Костанца | Барт Костанца || 3 | Мардж | Крамер | Мардж Крамър |+------------+------------+-----------+------ ----------+Пример 3 – Актуализиране на стойност
Сега, ако стойността се актуализира в
FirstName
илиLastName
колони, това ще повлияе на стойността, върната от изчислената колона. Няма нужда да го актуализирате в две колони.Пример:
UPDATE PersonSET LastName ='Bourne'WHERE PersonId =3;SELECT *FROM Person;Резултат:
+------------+------------+------------+------ ----------+| PersonID | Име | Фамилия | Пълно име ||------------+------------+-----------+------- ---------|| 1 | Омир | Сайнфелд | Хоумър Сайнфелд || 2 | Барт | Костанца | Барт Костанца || 3 | Мардж | Борн | Мардж Борн |+------------+------------+-----------+------ ----------+