SqlServer:
ALTER TABLE KC_BILLHEAD ADD bill_no AS coalesce(billno ,'' ) PERSISTED;
這是一個SQL語句,用于向表KC_BILLHEAD添加一個計算列bill_no。讓我解釋一下這個語句的各個部分:
ALTER TABLE KC_BILLHEAD - 修改表KC_BILLHEAD的結構
ADD bill_no - 添加一個名為bill_no的列
AS coalesce(billno, '') - 這個列的值是通過coalesce函數計算得到的,它會返回第一個非空值
PERSISTED - 表示這個計算列的值會被物理存儲在表中
這個語句的作用是創建一個新列bill_no,它會:
如果billno列有值,則bill_no等于billno的值
如果billno列為NULL,則bill_no等于空字符串''
由于指定了PERSISTED,這個值會被實際存儲在表中而不是每次計算
這是一個常見的SQL技巧,用于確保列中不會有NULL值,而是用空字符串代替。
- 如果為?
billno
?列提供值,bill_no
?會自動根據?COALESCE(billno, '')
?的規則計算結果并存儲(因為它是?PERSISTED
)。 - 如果更新?
billno
?列的值,bill_no
?也會自動重新計算并更新存儲的值。
oracle:
ALTER TABLE KC_BILLHEAD ADD (
? ? bill_no VARCHAR2(50) GENERATED ALWAYS AS (NVL(billno, '')) VIRTUAL
);
?
mysql:
ALTER TABLE KC_BILLHEAD ADD COLUMN bill_no VARCHAR(50)?
? ? GENERATED ALWAYS AS (IFNULL(billno, '')) STORED;
?
-----------------------------------------------------------------------------------------------------------
--查詢計算列
?SQL Server?
通過系統視圖?sys.computed_columns?查詢是否為計算列
SELECT is_computed, definition
FROM sys.computed_columns
WHERE object_id = OBJECT_ID('表名') AND name = '列名';
is_computed=1?表示是計算列,definition?列顯示計算公式
?Oracle?
查詢?ALL_TAB_COLS
?視圖的?VIRTUAL_COLUMN
?字段
SELECT column_name, virtual_column, data_default
FROM ALL_TAB_COLS
WHERE table_name = '表名' AND column_name = '列名';
VIRTUAL_COLUMN='YES'
?表示是虛擬列(計算列)
MySQL?
通過?INFORMATION_SCHEMA.COLUMNS
?表的?GENERATION_EXPRESSION
?字段判斷:
SELECT column_name, generation_expression
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '表名' AND COLUMN_NAME = '列名';
若?GENERATION_EXPRESSION
?不為空,則為生成列(計算列)