I am trying to create a persisted computed column using CASE expression:
ALTER TABLE dbo.Calendar ADD PreviousDate AS
case WHEN [Date]>'20100101' THEN [Date]
ELSE NULL
END PERSISTED
MSDN clearly says that CASE is deterministic, here
However, I am getting an error:
Msg 4936, Level 16, State 1, Line 1 Computed column 'PreviousDate' in table 'Calendar' cannot be persisted because the column is non-deterministic.
Of course, i can create a scalar UDF and explicitly declare it as deterministic, but is there a simpler way around this? I am already in the middle of getting the latest service pack. Thanks.
Вам нужно ПРЕОБРАЗОВАТЬ '20100101' со стилем.
Тип источника или цели: datetime или smalldatetime, другой источник или целевой тип представляет собой строку символов, а указан недетерминированный стиль.
Итак, попробуйте следующее:
...WHEN [Date] > CONVERT(datetime, '20100101', 112)....
Синтаксический анализ даты из строки может быть ненадежным, поскольку Я уже отвечал ранее (в основном в комментариях)
Редактировать:
Я бы не сказал, что это ошибка, но SQL Server запрашивает 100% разъяснение. yyyymmdd не является ISO, и анализ SQL Server yyyy-mm-dd ненадежен (см. ссылку на мой ответ)