前言

上一節(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)建表來看看計算列。

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

USE TSQL2012
GO

CREATE TABLE Employee
(
    employeeNumber INT NOT NULL, --員工編號
    employeeBirth DATETIME NOT NULL, --出生日期
    employeeRetirement AS (DATEADD(YEAR, 60, (employeeBirth)-(1))) PERSISTED --退休日期)

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

此時我們看到表中關(guān)于退休日期的設(shè)計,顯示其已經(jīng)是持久化了的

seo優(yōu)化培訓(xùn),網(wǎng)絡(luò)推廣培訓(xùn),網(wǎng)絡(luò)營銷培訓(xùn),SEM培訓(xùn),網(wǎng)絡(luò)優(yōu)化,在線營銷培訓(xùn)

接下來我們插入測試數(shù)據(jù)看看

網(wǎng)友評論