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