В SQL Server, изчислена колона е виртуална колона, която използва израз за изчисляване на стойността си.
Изчислената колона обикновено използва данни от други колони в своето изчисление. Ако данните в някоя от тези колони се актуализират, изчислената колона автоматично ще отразява актуализацията в нейното изчисление.
Пример за изчислена колона
+------------+-------------+------------+----------------+ | PersonID | FirstName | LastName | FullName | |------------+-------------+------------+----------------| | 1 | Homer | Seinfeld | Homer Seinfeld | | 2 | Bart | Costanza | Bart Costanza | | 3 | Marge | Kramer | Marge Kramer | +------------+-------------+------------+----------------+
В този пример FullName
колоната е изчислена колона. Той обединява стойностите от FirstName
и LastName
колони за изчисляване на пълното име.
Без изчислената колона, ако искате да изберете пълното име, ще трябва да направите нещо подобно:
SELECT FirstName + ' ' + LastName AS FullName FROM Person;
Или можете да използвате CONCAT()
функция, като тази:
SELECT CONCAT(FirstName, ' ', LastName) AS FullName FROM Person;
Всеки път, когато искате да изберете пълно име от таблицата, ще трябва да включите конкатенацията в заявката си.
Но като използвате изчислена колона като тази по-горе, можете да направите това:
SELECT FullName FROM Person;
Предимства на изчислените колони
Изчислените колони могат да спестят време при писане на заявки, да намалят грешките и дори да подобрят производителността.
Изчислените колони могат да бъдат полезни, ако откриете, че повтаряте една и съща заявка отново и отново, особено ако тази заявка се основава на бизнес правила, които рядко се променят.
Изчислената колона в предишния пример може да ни спести много време в бъдеще, защото няма да е необходимо да свързваме собственото и фамилното име всеки път, когато искаме да изберем пълното име на някого.
Примери за случаи на употреба
Примери за това, къде една изчислена колона може да бъде полезна, включват:
- Изчисляване на възрастта на дадено лице въз основа на датата му на раждане в друга колона
- Свързване на собствено и фамилно име въз основа на това, че собственото име е в една колона, а фамилията в друга
- Изчисляване на стойността на инвентара на даден продукт въз основа на броя продукти на склад в една колона и цената в друга.
- Изчислете ИТМ (индекс на телесна маса) на човек въз основа на неговия ръст и тегло в друга колона
- Създаване на колона „Ранг“, която класира редовете въз основа на стойности в други колони.
- Изчисляване на времената на състезанието на маратонците въз основа на началния и крайния им час в други колони
Устойчивост на изчислените колони
Изчислена колона не се съхранява физически в таблицата, освен ако не е маркирана PERSISTED
.
Ако е не постоянна изчислена колона, изчислението ще се извършва всеки път, когато се осъществи достъп до таблицата.
Ако е е постоянна изчислена колона, изчислената стойност се съхранява физически в таблицата. Това означава, че не е необходимо да изчислява стойността си всеки път, когато изпълнявате заявка. Ако данните се актуализират в една от колоните, за които извличат своята стойност, стойността на изчислената колона се актуализира и съхранява в таблицата. Това може да помогне за производителността.
Имайте предвид, че изчислена колона може да бъде запазена само ако е детерминирана. Ако е недетерминиран, ще получите грешка, ако се опитате да я запазите.
недетерминиран колоната е тази, която връща различни стойности дори и с един и същ вход. Например, ако използвате текущата дата във вашето изчисление, стойността ще бъде различна всеки ден и ще се счита за недетерминирана.
Ако просто свързвате собственото и фамилното име, тогава това би било детерминистично и бихте могли да запазите такава колона.
Създаване на изчислена колона
Можете да създавате изчислени колони от SSMS GUI или с Transact-SQL.
В SSMS
В SSMS, докато в Дизайн на таблици , създайте колоната, която искате да бъде изчислената колона (или просто я изберете, ако вече съществува), след това под Свойства на колоната раздел, въведете формулата си в Спецификация на изчислената колона поле за собственост.
Не се притеснявайте да дадете на изчислената колона тип данни – SQL Server ще й даде тип данни въз основа на вашата формула.
Можете също да изберете Да за Е постоянен ако желаете.
Използване на T-SQL
Вижте Създаване на изчислена колона в SQL Server с помощта на T-SQL за пример за създаване на изчислена колона с помощта на Transact-SQL.