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