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
不为空,则为生成列(计算列)