Я пытаюсь создать индексированное представление, используя следующий код (чтобы я мог опубликовать его для репликации в виде таблицы):
CREATE VIEW lc.vw_dates
WITH SCHEMABINDING
AS
SELECT DATEADD(day, DATEDIFF(day, 0, GETDATE()), number) AS SettingDate
FROM lc.numbers
WHERE number<8
GO
CREATE UNIQUE CLUSTERED INDEX
idx_LCDates ON lc.vw_dates(SettingDate)
lc.numbers — это просто таблица с 1 столбцом (number
), который увеличивается на строку 1-100.
Тем не менее, я продолжаю получать сообщение об ошибке:
Столбец «SettingDate» в представлении «lc.vw_dates» нельзя использовать в индексе или статистике или в качестве ключа раздела, поскольку он недетерминирован.
Я понимаю, что GETDATE()
недетерминирован. Но есть ли способ заставить это работать?
Я использую MS SQL 2012.
Изменить: надежда заключалась в том, чтобы иметь возможность преобразовать GetDate(), чтобы сделать его детерминированным (похоже, что это должно быть при удалении времени). Если никто не знает, как это сделать, я закрою этот вопрос и отмечу предложение создать таблицу календаря как правильное.