SQLServer計(jì)算列應(yīng)用指南
--- 創(chuàng)建計(jì)算列1)計(jì)算列是指在創(chuàng)建表時(shí)定義其值為某種計(jì)算公式,通常適用于不變的公式,例如單價(jià)乘以數(shù)量等。持久化的計(jì)算列會(huì)將計(jì)算結(jié)果存儲(chǔ)在物理列中,可以建立索引進(jìn)行查詢;而非持久化的計(jì)算列只是虛擬存
---
創(chuàng)建計(jì)算列
1)計(jì)算列是指在創(chuàng)建表時(shí)定義其值為某種計(jì)算公式,通常適用于不變的公式,例如單價(jià)乘以數(shù)量等。持久化的計(jì)算列會(huì)將計(jì)算結(jié)果存儲(chǔ)在物理列中,可以建立索引進(jìn)行查詢;而非持久化的計(jì)算列只是虛擬存在,每次取值時(shí)都會(huì)動(dòng)態(tài)計(jì)算,無法添加索引。
2)在創(chuàng)建表時(shí),可以同時(shí)創(chuàng)建計(jì)算列,并使用`persisted`標(biāo)記來指示列是否持久化。例如,在創(chuàng)建名為ComputeTable的表時(shí),可以定義一個(gè)計(jì)算列Amount,其公式為Price * Number,SQL語句如下:
```sql
create table ComputeTable(
Id varchar(36) not null,
Price decimal(6,2) null,
Number int null,
Amount as (Price * Number) persisted
);
```
查看計(jì)算列持久化
1)通過上述SQL語句創(chuàng)建的計(jì)算列默認(rèn)是持久化的,可以通過在SQL Server Management Studio中右鍵點(diǎn)擊表ComputeTable并選擇“設(shè)計(jì)”,在彈出窗口中查看Amount行記錄下方的“計(jì)算列規(guī)范”顯示的計(jì)算公式以及持久化標(biāo)志。
插入測(cè)試數(shù)據(jù)(失敗的情況)
嘗試向ComputeTable表插入測(cè)試數(shù)據(jù)時(shí),對(duì)于計(jì)算列Amount不能直接賦值,系統(tǒng)會(huì)提示“不能修改列,因?yàn)樗怯?jì)算列,或者是UNION運(yùn)算符的結(jié)果”。
插入測(cè)試數(shù)據(jù)(成功的情況)
對(duì)于具有計(jì)算列的表,插入記錄時(shí)無法為計(jì)算列賦值,該列會(huì)根據(jù)創(chuàng)建時(shí)的公式自動(dòng)計(jì)算值。
查詢數(shù)據(jù)
通過使用select語句可以直接查詢表中所有數(shù)據(jù),但在實(shí)際場(chǎng)景中,最好避免全表查詢,特別是當(dāng)數(shù)據(jù)量龐大時(shí)。
計(jì)算列修改值
1)嘗試直接使用SQL語句修改計(jì)算列Amount的值會(huì)導(dǎo)致錯(cuò)誤提示:“不能修改列Amount,因?yàn)樗怯?jì)算列,或者是UNION運(yùn)算符的結(jié)果”。
2)想要修改計(jì)算列的值只能通過修改與公式相關(guān)聯(lián)的其他列的數(shù)值,這樣計(jì)算列的值會(huì)自動(dòng)更新。
通過以上方法,可以更好地理解和應(yīng)用SQLServer中的計(jì)算列功能,提高數(shù)據(jù)庫設(shè)計(jì)的靈活性和效率。