Não é possível persistir a coluna computada - não é determinista

Eu tenho essa função para uma coluna computada:

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

Eu adicionei oWITH schemabinding na esperança, seria determinista, para que eu possa persistir. Deve ser como as duas entradas[Week] e[Year] sempre produzirá os mesmos resultados.

O erro exato é:

A coluna computada 'AllocatedTimeStart' na tabela 'Tmp_Bookings' não pode ser mantida porque a coluna é não-determinística.

Eu estou usando essa fórmula na coluna:

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

E a coluna defs:

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

Alguma ideia?

EDITAR:

Linha alterada para:

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

Mas agora recebo um erro dizendo que a fórmula da coluna é inválida. Mesmo que a função seja bem salva.

EDIT 2:

Eu mostrei exatamente o que estou fazendo (ou pelo menos eu tentei). Não há nada extra realmente. Como diz a função anterior (original) acoplada com a fórmula ref[dbo].AllocatedStartDate(...) para ele na coluna trabalhada, mas não estava persistindo, dizia que era não determinista. Então, de acordo com a sugestão, eu mudei a FUNCTION, substituindo a parte de conversão pelo novo código, então a função agora se parece com:

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

Então eu tentei a mesma fórmula que antes no campo computado(([dbo].[GetAllocatedStartTime]([Year],[Week]))) ... e rejeita a fórmula, diz que ela não é válida ... o que é estranho, já que a fórmula é a mesma, então ela deve estar fazendo algum tipo de verificação da função alterada e achando que ela é inválida, o que também é estranho porque eu fiz uma planícieSELECT dbo.GetAllocatedStartTime(2012,13) e funcionou ...

Então sim eu estou confuso, e eu nunca viSqlFiddle não importa usar. Mas realmente não há nada mais do que acabei de dizer.

questionAnswers(1)

yourAnswerToTheQuestion