計算列

計算列由可以使用同一表中的其他列的表達式計算得來。表達式可以是非計算列的列名、常量、函式,也可以是用一個或多個運算符連線的上述元素的任意組合。表達式不能為子查詢。

【SQL Server】
計算列由可以使用同一表中的其他列的表達式計算得來。表達式可以是非計算列的列名、常量、函式,也可以是用一個或多個運算符連線的上述元素的任意組合。表達式不能為子查詢。
例如,在 AdventureWorks 示例資料庫中,Sales.SalesOrderHeader 表的 TotalDue 列具有以下定義:TotalDue AS subtotal + TaxAmt + Freight
除非另行指定,否則計算列是未實際存儲在表中的虛擬列。每當在查詢中引用計算列時,都將重新計算它們的值。資料庫引擎在 CREATE TABLE 和 ALTER TABLE 語句中使用 PERSISTED 關鍵字來將計算列實際存儲在表中。如果在計算列的計算更改時涉及任何列,將更新計算列的值。通過將計算列標記為 PERSISTED,可以對具有確定性但不精確的計算列創建索引。另外,如果計算列引用 CLR 函式,則資料庫引擎不能驗證該函式是否真正具有確定性。在這種情況下,計算列必須為 PERSISTED,以便可對其創建索引。
計算列可用於選擇列表、WHERE 子句、ORDER BY 子句或任何可使用正則表達式的其他位置,但下列情況除外:
用作 CHECK、FOREIGN KEY 或 NOT NULL 約束的計算列必須標記為 PERSISTED。如果計算列的值由具有確定性的表達式定義,並且索引列中允許使用計算結果的數據類型,則可將該列用作索引中的鍵列,或者用作 PRIMARY KEY 或 UNIQUE 約束的一部分。
例如,如果表中含有整數列 ab,則可以對計算列 a + b 創建索引,但不能對計算列 a + DatePart(dd, GETDATE()) 創建索引,因為在後續調用中,其值可能發生改變。
計算列不能作為 INSERT 或 UPDATE 語句的目標。
資料庫引擎基於使用的表達式自動確定計算列的為 Null 性。即使只有非空列,大多數表達式的結果也“認為”可為空值,因為下溢或溢出生成的結果也可能為空。使用帶 AllowsNull 屬性的 COLUMNPROPERTY 函式可查明表中任何計算列的為 Null 性。通過指定 ISNULL (check_expression, constant) 可以將可為空值的表達式轉換為不可為空值的表達式,其中, constant 是可替換所有空結果的非空值.

相關詞條

相關搜尋

熱門詞條

聯絡我們