0

如果我有表FOO与列数 - FOO.ID,VARCHAR - FOO.LABEL是有办法,我可以有SQL设置一个计算DEFAULT VALUEFOO.LABEL要像“DFLT_LBL_” + FOO.ID可以计算SQL默认值吗?

IE与记录ID = 1将LABEL设置为“DFLT_LBL_1”,并且具有ID 2的记录将LABEL设置为“DFLT_LBL_2”等等。在所有数据库工作

+0

请用你正在使用的数据库标记你的问题。 –

+2

您可以使用'插入触发器'之前。默认值意味着如果在插入时不为该列提供任何值,则插入默认值而不是null。所以在你的情况下,这些值不是默认值。它们应该基于'foo.id'派生,可以通过触发器来完成。 – Utsav

回答

0

一种方法是使用一个观点:

create view v_table as 
    select t.*, concat(label, id) as label 
    from foo t; 

这不会让你去改变它。你可以在被称为像override_label表中的列,其中有一个NULL默认,然后看法是:

create view v_table as 
    select t.*, coalesce(override_label, concat(label, id)) as label 
    from foo t; 

在一些数据库中,你可以做一个计算列类似的东西:

alter table foo add label as (coalesce(override_label, concat(label, id))); 
+0

是的,整个系统已经直接查看这个表,它仍然必须有能力更新到一个自定义值,只是如果它被插入为null,他们需要这个默认模式。我认为触发器将效果最好 –

+0

@AdamJames。 。 。这显然是你的决定。我发现触发器很难维护,所以我更喜欢最后的解决方案,因为SQL Server支持计算列。 –