Значение по умолчанию в столбце, который проверяет, какой текущий год указано в другом столбце - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь сделать столбец со значением по умолчанию. Значение по умолчанию рассчитывается следующим образом:

  1. Содержит ли столбец Period (та же таблица) текущий год? Если это так, то значением по умолчанию является столбец «AnswerA» (та же таблица)

  2. Если он не содержит текущий год, тогда значением по умолчанию является столбец «AnswerB» (та же таблица)

Я считаю, что это должно быть сделано так:

CREATE TABLE dbo.[testComputed](
[Id] int IDENTITY(1,1) NOT NULL,
[Period] nvarchar(100) NOT NULL,
[AnswerA] char NOT NULL,
[AnswerB] char NOT NULL,
[ComputedColumn] char NULL DEFAULT (
    iif( [Period] Contains(CONVERT(nvarchar(5),YEAR(GETDATE()))), [AnswerA], [AnswerB]))

Столбец Period не является типом Date, это что-то вроде этого: 01/2019

Я не уверен, если это вообще возможно, я надеюсь, что это правильно, но мне не хватает некоторых базовых знаний, чтобы выполнить это.

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете определить столбец следующим образом:

ComputedColumn as (case when Period like concat('%', year(getdate()), '%')
                        then AnswerA else AnswerB
                   end)

ComputedColumn вычисляется при извлечении данных из таблицы.Итак, когда меняется год, значение также меняется.

Я не уверен, что означает «редактируемый».Значение по умолчанию для столбца не может содержать ссылки на столбцы (может быть способ обойти это с помощью пользовательских функций, но это выглядит как перебор).

Поскольку данные всегда вставляются в текущем году, вы можете использоватьтриггер для присвоения значения.

Однако, может быть, лучше просто использовать столбец значения переопределения (который можно обновить), а затем:

OverrideValue char(1),
ComputedColumn as (case when OverrideValue is not null
                        then OverrideValue
                        when Period like concat('%', year(getdate()), '%')
                        then AnswerA else AnswerB
                   end)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...