Невозможно сохранить вычисляемый столбец - недетерминированный

У меня есть эта функция для вычисляемого столбца:

CREATE FUNCTION [dbo].[GetAllocatedStartTime](@Year INT, @Week INT)
RETURNS DATETIME

WITH schemabinding
AS BEGIN
    RETURN dateadd(week,@Week-(1),dateadd(day,(-1),dateadd(week,datediff(week,(0),CONVERT([varchar](4),@Year,(0))+'-01-01'),(1))))
END

GO

Я добавилWITH schemabinding в надежде, что это сделает его детерминированным, и я смогу его сохранить. Должно быть как два входа[Week] а также[Year] всегда будет давать одинаковые результаты.

Точная ошибка:

Вычисляемый столбец «AllocatedTimeStart» в таблице «Tmp_Bookings» не может быть сохранен, поскольку столбец недетерминирован.

Я использую эту формулу в столбце:

([dbo].[GetAllocatedStartTime]([Year],[Week]))

И столбец defs:

[Week] [int] NOT NULL,
[Year] [int] NOT NULL,
[AllocatedTimeStart]  AS ([dbo].[GetAllocatedStartTime]([Year],[Week])),

Есть идеи?

РЕДАКТИРОВАТЬ:

Изменена строка на:

RETURN dateadd(week,@Week-(1),dateadd(day,(-1),dateadd(week,datediff(week,(0),CONVERT(datetime,CONVERT([varchar](4),@Year,(0))+'0101',112)),(1))))

Но теперь я получаю сообщение о том, что формула для столбца неверна. Хотя функция сохраняет нормально.

РЕДАКТИРОВАТЬ 2:

Я показал именно то, что я делаю (или, по крайней мере, я пытался). Там нет ничего лишнего на самом деле. Как говорится, предыдущая функция (оригинальная) в сочетании с формулой ref[dbo].AllocatedStartDate(...) чтобы оно в колонке работало, но не настаивало, в нем говорилось, что оно не детерминировано. Таким образом, согласно предложению, я изменил FUNCTION, заменив часть преобразования новым кодом, поэтому теперь функция выглядит так:

FUNCTION [dbo].[GetSTime](@Year INT, @Week INT)

RETURNS DATETIME
WITH schemabinding
AS BEGIN
    RETURN dateadd(week,@Week-(1),dateadd(day,(-1),dateadd(week,datediff(week,(0),CONVERT(datetime,CONVERT([varchar](4),@Year,(0))+'0101',112)),(1))))
END

Затем я попробовал ту же формулу, что и раньше, в вычисляемом поле(([dbo].[GetAllocatedStartTime]([Year],[Week]))) ... и он отклоняет формулу, говорит, что она недействительна ... что странно, поскольку формула одинакова, поэтому он должен выполнить какую-то проверку измененной функции и найти ее недействительной, что также странно потому что я сделал простуюSELECT dbo.GetAllocatedStartTime(2012,13) и это сработало ...

Так что да, я в замешательстве, и я никогда не виделSqlFiddle не берите в голову использовать это. Но на самом деле нет ничего больше, чем то, что я только что сказал.

Ответы на вопрос(1)

Ваш ответ на вопрос