【SqlServer】SqlServer中計算資料行

來源:互聯網
上載者:User

標籤:compute   ros   man   date   判斷   特殊   一個   建立   mic   

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

#建立方法: 1、通過sql的方法建立:
1 create table table12 (3     Number int,4     Price money,5     Amount as Number*Price --計算資料行6 )

 

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

2、在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子句中使用,因為它是計算資料行。”

 

 

 

 

 

 

 

 

 

------------------------------------------------------------------

【SqlServer】SqlServer中計算資料行

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.