Я пытаюсь понять, почему моя функция недетерминирована. Я хочу поместить эту функцию в вычисляемый столбец и индексировать его. 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
В информации в Интернете упоминаются даты кастинга и конвертации, но эти примеры, похоже, не применимы в моем случае. Я понимаю, как детерминированность означает, что функция всегда возвращает один и тот же результат при одном и том же входе. Я чувствую, что эта функция делает это.
Я в замешательстве, в чем именно проблема.
dateadd()
, которая является детерминированной (docs.microsoft.com/en-us/sql/relational-databases/). - person Gordon Linoff   schedule 17.02.2018