SqlServer中計算列詳解


 計算列區別於需要我們手動或者程序給予賦值的列,它的值來源於該表中其它列的計算值。比如,一個表中包含有數量列Number與單價列Price,我們就可以創建計算列金額Amount來表示數量*單價的結果值,創建Amount列后,在程序中需要使用計算金額這個值時,就不用取出Number列與Price列的值后相乘,而是直接取Amount列的值就可以了。

 

那么這個計算列要如何建立呢?

先看通過sql的方法創建:

 

create table table1

(

number decimal(18,4),

price money,

Amount as number*price --這里就是計算列

)

計算列是不需要我們指定數據類型與是否允許為null等信息的,SqlServer會根據情況自動賦予數據類型。

 

在microsoft sql server management studio建創計算列更是簡單。如下圖所示,只要在列屬性中的"計算所得的列規范"-"公式"中填寫計算列的公式就可以了。

 

 

在上面的圖片中我們也看到有"是持久的"這個選項,這個選項有什么用呢?

計算列如果沒有特殊的設定,它將會是一個虛擬列,也就是這個列實際上是不存在的,只是每次要取這列的值時,sql會按照計算列的公式計算一次,再把結果返回給我們。這樣就會存在一些問題,比如,每次計算都會消耗一定的時間,而且也不能在這個列上創建索引。那么能不能把計算列的結果存起來,每次取數據的時候直接把結果返回給我們,而不用每次去計算。呵呵,恭喜你,創建計算列時把"是持久的"這個選項勾起來,就能達到我們的目的了,這時候,計算列就是一個實實在在的列,也可以在該列上創建索引了。

 

如果要查看所有已經存在計算列以及該計算列是否為"是持久的",可以利用sys.computed_columns視圖

 

注意:

1,計算列如果沒有設置為"是持久的",那么它是不可以用來做check,foreign key或not null約束。當然,如果我們在microsoft sql server management studio為計算列設置了check等約束了,sql server會自動將該列設置為"是持久的"。

2,計算列不可以再次用來作為中一個計算列的一部分。

3,在觸發器,不可以對計算列進行update判斷,否則會報如下錯誤:

列”不能在IF UPDATE子句中使用,因為它是計算列。”

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM