Как сделать недетерминированную функцию детерминированной?

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

ALTER FUNCTION [dbo].[GetPeriodFromDates]
(
    -- Add the parameters for the function here
    @from date,
    @to date
)
RETURNS char(1)
AS
BEGIN
    declare @result char(1)
    select @result = case 
        when DateAdd(day, -1, DateAdd(year, 1, @from)) = @to then 'Y'
        when DateAdd(day, -1, DateAdd(quarter, 1, @from)) = @to then 'Q'
        when DateAdd(day, -1, DateAdd(month, 1, @from)) = @to then 'M'
        when DateAdd(day, -1, DateAdd(week, 1, @from)) = @to then 'W'
        else NULL
    end

    return @result
END

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

Я в замешательстве, в чем именно проблема.


person jwrightmail    schedule 16.02.2018    source источник
comment
Согласно документации, эта функция должна быть детерминированной, поскольку она вызывает только dateadd(), которая является детерминированной (docs.microsoft.com/en-us/sql/relational-databases/).   -  person Gordon Linoff    schedule 17.02.2018
comment
Afaik udf должен использовать WITH SCEHMABINDING, чтобы быть детерминированным.   -  person MatBailie    schedule 17.02.2018
comment
@MatBailie Спасибо. Я нашел это в сети, и это сработало! stackoverflow.com/questions/3651662/   -  person jwrightmail    schedule 17.02.2018
comment
Это точная копия вопроса, который вы упомянули   -  person Paul Karam    schedule 17.02.2018