0

Если у меня есть таблица FOO с числом столбцов - FOO.ID, VARCHAR - FOO.LABEL есть способ, которым я могу иметь SQL установить расчетную DEFAULT VALUE для FOO.LABEL быть как «DFLT_LBL_» + FOO.IDМожет ли вычисляться значение по умолчанию SQL?

IE запись с ID = 1 будет иметь LABEL, установленный в «DFLT_LBL_1», и запись с ID 2 будет иметь LABEL, установленный в «DFLT_LBL_2» и так далее.

+0

Пожалуйста, отметьте свой вопрос в базе данных, которую вы используете. –

+2

Вы можете сделать это, используя 'before insert trigger'. Значение по умолчанию означает, что если вы не укажете какое-либо значение для этого столбца при вставке, значение по умолчанию будет вставлено вместо нуля. Поэтому в вашем случае значения не являются значениями по умолчанию. Они должны быть получены на основе '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

Да, вся система уже просматривает эту таблицу напрямую, и она все равно должна иметь возможность обновлять до пользовательского значения, а именно, если она вставлена ​​как нуль, они хотят получить этот шаблон по умолчанию. Я думаю, что триггер будет работать лучше –

+0

@AdamJames. , , Это, безусловно, ваше решение. Я считаю, что триггеры трудно поддерживать, поэтому я предпочел бы последнее решение, потому что SQL Server поддерживает вычисленные столбцы. –