前言
上一節(jié)我們結(jié)束了Hash Match Aggregate和Stream Aggregate的講解,本系列我們來講講關(guān)于SQL Server中的計算列問題,簡短的內(nèi)容,深入的理解,Always to review the basics。
初探計算列持久化(Compued Column Persisted)
在SQL Server 2005就引入了計算列,我們首先稍微看下在msdn關(guān)于計算列的定義:計算列由可以使用同一表中的其他列的表達(dá)式計算得來。表達(dá)式可以是非計算列的列名、常量、函數(shù),也可以是用一個或多個運算符連接的上述元素的任意組合。表達(dá)式不能為子查詢。實際上就是為了定義一個列來對其他列來進(jìn)行計算可以是列名、函數(shù)等,那么它的使用場景是什么呢?下面我們首先來舉個例子。當(dāng)需要導(dǎo)出一些值時,此時這些值需要通過計算才能被導(dǎo)出,同時呢,有一些列還依賴于另外的一列或者更多列,如果一個列進(jìn)行了更新則其依賴的列必須同步進(jìn)行更新,上述場景通過對一個列或者多個列進(jìn)行計算,此時我們需要定義一個將一個列或者多個列進(jìn)行計算得到的值的列,這就是計算列。我們來看一個典型的例子,在一個公司上班的所有員工,在公司內(nèi)部系統(tǒng)中會存其所有員工的信息,比如員工編號、出生日期等,如果此時我們需要導(dǎo)出員工的退休日期呢,假設(shè)在中國現(xiàn)在男性退休時間為60年后,此時我們需要通過出生日期算出60年后的日期,也就說在表中還需要定義一個退休日期列。下面我們創(chuàng)建表來看看計算列。
USE TSQL2012 GO CREATE TABLE Employee ( employeeNumber INT NOT NULL, --員工編號 employeeBirth DATETIME NOT NULL, --出生日期 employeeRetirement AS (DATEADD(YEAR, 60, (employeeBirth)-(1))) PERSISTED --退休日期)
此時我們看到表中關(guān)于退休日期的設(shè)計,顯示其已經(jīng)是持久化了的
接下來我們插入測試數(shù)據(jù)看看