SQL:根据另一列的条件填充表列

时间:2018-11-07 12:56:04

标签: sql sql-server create-table

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

“比例”列是通过存储过程填充的,是十进制(7,2)字段。如果Proportion <0,我想在“说明”列中输出“负比例”,我想知道这样做的最佳方法是什么。

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

执行此操作的最佳选择是什么?

1 个答案:

答案 0 :(得分:1)

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

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

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;