Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Промяна на съществуваща колона в изчислена колона в SQL Server (пример за T-SQL)

Тази статия демонстрира как да използвате 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 | Мардж | Борн | Мардж Борн |+------------+------------+-----------+------ ----------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване на цялата DataTable в базата данни наведнъж вместо ред по ред?

  2. Грешки в SQL Server при импортиране на CSV файл, въпреки че varchar(MAX) се използва за всяка колона

  3. SQL WHERE клауза, съответстваща на стойности с крайни интервали

  4. Как да изчистите регистъра на транзакциите на SQL Server?

  5. Премахнете числата от string sql сървъра