Computed column是一個虛擬列,在其所屬表中並無物理存在,除非我們將其標爲PERSISTED; 它用來存儲其所屬表的其他列經過計算的值。
Comupted column 不能有默認值、不能有外鍵關聯也不能接收NOT NULL限制;因爲它的值取決於其他列的計算值,所以我們很容易理解它不能接收插入新值和修改。Computed column 可以和其他列一起作爲主鍵也可以加UNIQUE修飾,可以加爲索引列,當其爲索引列的時候需要注意的是,如果參加計算的某一項是可變的,比如時間,那就不能作爲 索引列。
添加Computed column的兩種方式:
1. 定義表時:
IF EXISTS(select * from sys.objects where object_id = OBJECT_ID('Inventory'))
BEGIN
DROP TABLE Inventory
END
GO
CREATE TABLE Inventory
(
ItemID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ItemsInStore int NOT NULL,
ItemsInWarehouse int NOT NULL,
TotalItems as itemsInStore + ItemsInWarehouse -- PERSISTED
)
Insert into Inventory (ItemsInStore,ItemsInWarehouse) values( 2,3);
Insert into Inventory (ItemsInStore,ItemsInWarehouse) values( 4,3);
GO
select * from Inventory;
2. 爲表添加新列:IF EXISTS(select * from sys.objects where object_id = OBJECT_ID('Inventory'))
BEGIN
DROP TABLE Inventory
END
GO
CREATE TABLE Inventory
(
ItemID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
ItemsInStore int NOT NULL,
ItemsInWarehouse int NOT NULL
)
GO
Insert into Inventory (ItemsInStore,ItemsInWarehouse) values( 2,3);
Insert into Inventory (ItemsInStore,ItemsInWarehouse) values( 4,3);
GO
ALTER TABLE Inventory ADD TotalItems AS itemsInStore + ItemsInWarehouse -- PERSISTED ;
GO
select * from Inventory;