計算列

計算列

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

基本介紹

  • 中文名:計算列
  • 外文名:Computed Columns
  • 性質:計算機
  • 類別:資料庫
  • 套用範圍:選擇列表等
簡介,套用範圍,

簡介

【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 是可替換所有空結果的非空值.
例子:
CREATE TABLE dbo.Products
(
ProductID int IDENTITY (1,1) NOT NULL
, QtyAvailable smallint
, UnitPrice money
, InventoryValue AS QtyAvailable * UnitPrice
);
-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
VALUES (25, 2.00), (10, 1.5);
-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products;
ALTER TABLE dbo.Products DROP COLUMN RetailValue;
GO
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5);

相關詞條

熱門詞條

聯絡我們