Why is my CASE expression non-deterministic?

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.

6
задан gbn 30 January 2011 в 15:56
поделиться

1 ответ

Вам нужно ПРЕОБРАЗОВАТЬ '20100101' со стилем.

Тип источника или цели: datetime или smalldatetime, другой источник или целевой тип представляет собой строку символов, а указан недетерминированный стиль.

Итак, попробуйте следующее:

...WHEN [Date] > CONVERT(datetime, '20100101', 112)....

Синтаксический анализ даты из строки может быть ненадежным, поскольку Я уже отвечал ранее (в основном в комментариях)

Редактировать:

Я бы не сказал, что это ошибка, но SQL Server запрашивает 100% разъяснение. yyyymmdd не является ISO, и анализ SQL Server yyyy-mm-dd ненадежен (см. ссылку на мой ответ)

17
ответ дан 8 December 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: