2013-11-27 4 views
3

SQL Server 10.50.1600Детерминированная функция не является детерминированной

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

ALTER TABLE [dbo].[Modified] 
ADD [StartQDate] AS ([dbo].[QDay]([StartDT])) PERSISTED, 
    [EndQDate] AS ([dbo].[QDay]([EndDT])) PERSISTED; 

При попытке создания вычисленного столбца я получаю следующую ошибку.

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

за исключением того факта, что моя скалярная функция QDay определяется как

FUNCTION [dbo].[QDay] 
(
@Date DATETIME 
) 
RETURNS INT 
AS 
BEGIN 
    RETURN YEAR(@Date)*10000+MONTH(@Date)*100+DAY(@Date) 
END 

Который согласно Microsoft должен быть детерминированным.

Даже если изменить функцию

FUNCTION [dbo].[QDay] 
(
@Date DATETIME 
) 
RETURNS INT 
AS 
BEGIN 
    RETURN 1 
END 

я все еще получаю сообщение Недетерминированной ошибки.

У меня это работает на другом сервере. Я в недоумении, что делать.

+0

Зачем использовать скалярную функцию на всех? 'EndQDate As Year (EndDT) * 10000 + месяц (EndDT) * 100 + DAY (EndDT)'? – gvee

+0

Возможно, 'DATETIME' не является детерминированным? Связанная вами страница указывает, что другие функции детерминированы, если они не используются с 'DATETIME', а' DATETIME' не указаны в гарантированных детерминированных функциях. – taz

+0

Возможно, релевантно: http://stackoverflow.com/questions/3037330/why-is-date-time-offset-non-deterministic-in-sql-server-2008 – taz

ответ

Смежные вопросы