首页 > 解决方案 > SQL:根据另一列的条件填充表列

问题描述

我有一个包含两个字段的 SQL 表:比例和说明。

比例列通过存储过程填充,是一个十进制 (7,2) 字段。如果比例 < 0,我想将“负比例”输出到解释列,我想知道最好的方法是什么。

问题是,解释列需要保持可编辑状态(因此不是计算列)。例如,用户仍然需要能够使用自己的文本更新此列,在某些情况下,它只会添加到该字段中已经存在的“负比例”文本中。

我这样做的最佳选择是什么?

标签: sqlsql-servercreate-table

解决方案


这很棘手。列的默认值不能是其他列的表达式。您可以使用触发器或在应用程序级别实现它。

另一种方法是有一个“隐藏”列:

create table t (
    proportion decimal(10, 2),
    _explanation varchar(255),
    explanation as (case when _explanation is null and proportion < 0 then 'Negative proportion' end)
);

这不需要触发器,但您需要插入_explanation. 您可以使用视图实现类似的逻辑:

create table t (
    proportion decimal(10, 2),
    explanation varchar(255)
);

create view v_t as 
    select proportion, 
           (case when explanation is null and proportion < 0 then 'Negative proportion' end) as explanation
    from t;

推荐阅读