Столбец SQL с вычислением значения по умолчанию при создании таблицы - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь создать таблицу с двумя столбцами, holiday_date и day_of_the_week .

Я бы хотел, чтобы столбец day_of_the_week по умолчанию выводиться из столбца holiday_date с использованием функции datepart () .Столбец day_of_the_week по умолчанию имеет значение null и вычисляется при добавлении новых значений holiday_date .

Я пытался использовать следующий запрос:

CREATE TABLE [HolidaysTest] (
    [holiday_date] varchar(50),
    [day_of_the_week] int DEFAULT datepart(dW, holiday_date)
)

Это не работает, и ошибка, которая появляется в результате, показана ниже

Имя "holiday_date" не допускается в этом контексте.Допустимые выражения - это константы, константные выражения и (в некоторых контекстах) переменные.Имена столбцов не допускаются.

Ответы [ 2 ]

1 голос
/ 27 сентября 2019

Если вы хотите, чтобы day_of_the_week() было в таблице и всегда соответствовало holiday_date, то я бы порекомендовал:

create table HolidaysTest (
    holiday_date date,
    day_of_the_week as (datepart(weekday, holiday_date))
);

Обратите внимание на изменение типа holiday_date. Не хранить даты в виде строк! Использовать встроенные типы данных.

day_of_the_week рассчитывается при обращении к нему в запросе.Это всегда точно.

Кроме того, не прописано weekday.Как правило, это делает запросы менее двусмысленными и более понятными.

1 голос
/ 27 сентября 2019

Если вы не хотите сохранять день недели и хотите только вернуть значение int, представляющее неделю дня, не создавайте для него столбец в таблице.

Просто создайте таблицу сholiday_date и в момент возникновения пожара выберите запрос напишите примерно так:

select holiday_date, DATEPART(WEEKDAY, holiday_date) from HolidaysTest
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...