Ne peut pas persister colonne calculée - non déterministe

J'ai cette fonction pour une colonne calculée :

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

J'ai ajouté le WITH schemabinding dans l'espoir que ce serait déterministe afin que je puisse persister. Il faut que les deux entrées [Week] et [Year] produisent toujours les mêmes résultats.

L'erreur exacte est :

Colonne calculée 'AllocatedTimeStart' dans la table 'Tmp_Bookings' ne peut pas être conservé, car la colonne est non-déterministe.

Je suis à l'aide de cette formule dans la colonne :

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

Et la colonne defs :

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

Des idées?

EDIT:

Changé de ligne :

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

Mais maintenant j'ai une erreur disant que la formule pour la colonne n'est pas valide. Même si la fonction enregistre bien.

EDIT 2:

J'ai montré exactement ce que je suis en train de faire (ou au moins j'ai essayé). Il n'y a rien de plus vraiment. Comme il est dit de la fonction précédente (original), couplé avec la formule ref [dbo].AllocatedStartDate(...) dans la colonne travaillé, mais n'a pas été persistant, il dit qu'il est non déterministe. Ainsi, selon la suggestion que j'ai modifié la FONCTION, en remplacement de la conversion de la partie avec le nouveau code, la fonction ressemble maintenant à :

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

Ensuite, j'ai essayé la même formule que précédemment dans le champ calculé (([dbo].[GetAllocatedStartTime]([Year],[Week]))) ... et il rejette la formule, affirme que ses pas valide... ce qui est étrange que la formule est la même, donc il doit être en train de faire un certain type de contrôle de l'évolution de la fonction et de trouver que, pour être valide, ce qui est aussi étrange parce que j'ai fait une plaine SELECT dbo.GetAllocatedStartTime(2012,13) et cela a fonctionné...

Donc, oui, je suis confus, et je n'ai jamais vu SqlFiddle jamais l'esprit de l'utiliser. Mais il n'y a vraiment rien de plus que ce que je viens de dire.

Le problème n'est pas avec votre fonction, de ses avec la colonne calculée sur votre table. Post cette définition sur votre question afin que nous puissions vous aider
Quelle version de SQL Server est-ce pour?
2008 R2
Qui ligne avez-vous changé? Voulez-vous dire que vous avez changé la définition de colonne calculée à utiliser RETURN dateadd(...) directement?
Regarde comme il y a un problème avec SQL Violon. Ne ceci mieux travailler? sqlfiddle.com/#!6/8fd88/1/0

OriginalL'auteur sprocket12 | 2013-01-02