Значение по умолчанию в столбце, которое проверяет, указан ли текущий год в другом столбце

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

  1. Содержит ли столбец «Период» (та же таблица) текущий год? Если это так, то значением по умолчанию является столбец «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

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

Вы ищете вычисляемый столбец. Как определить, есть ли у Period текущий год?

Ilyes 11.07.2019 11:18

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

Pomme 11.07.2019 11:19

Нет, вы не можете, потому что это не разрешено в SQL Server, вам нужен вычисляемый столбец, чтобы вернуть значение одного столбца.

Ilyes 11.07.2019 11:41
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
3
26
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете определить столбец как:

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)

Другие вопросы по теме